Angularjs,在指令中观察范围变量

时间:2015-02-05 04:47:07

标签: angularjs watch

从控制器,我需要观察与指令范围双向绑定的变量。

我在JsFiddle中测试过, angular 1.1运行良好,但angular1.2没有。

我该如何解决?

http://jsfiddle.net/4091qg9r/3/

var simulationAppModule = angular.module('simulationApp', [])

simulationAppModule.controller('tst', function ($scope) {
    $scope.acts = [];


    $scope.$watch('acts', function (neww, old) {
        console.log('controller', neww)
    }, true)
})

simulationAppModule.directive('bn', function () {
    return {
        restrict: "A",
        scope: {
            acts: '='
        },
        link: function ($scope, iElement, iAttrs) {
            $scope.addaction = function () {
                $scope.acts.push('aaa')
            }
        }
    }
})

1 个答案:

答案 0 :(得分:0)

问题在于您在指令中声明了隔离范围,因此在指令元素上使用$scope.addaction时永远不会达到ng-click="addaction()"。 ngClick和addaction属于不同的范围。

一种解决方案是不使用隔离范围,因此您可以删除

scope: {
    acts: '='
},

如果您确实需要将范围作为孤立的子范围,那么您可以尝试(不推荐)

$scope.$parent.addaction = function () {
    $scope.acts.push('aaa')
}

但最好的方法是修改你的设置,因为addaction函数应该在控制器中声明为,而不是在指令中。