从控制器,我需要观察与指令范围双向绑定的变量。
我在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')
}
}
}
})
答案 0 :(得分:0)
问题在于您在指令中声明了隔离范围,因此在指令元素上使用$scope.addaction
时永远不会达到ng-click="addaction()"
。 ngClick和addaction
属于不同的范围。
一种解决方案是不使用隔离范围,因此您可以删除
scope: {
acts: '='
},
如果您确实需要将范围作为孤立的子范围,那么您可以尝试(不推荐)
$scope.$parent.addaction = function () {
$scope.acts.push('aaa')
}
但最好的方法是修改你的设置,因为addaction
函数应该在控制器中声明为,而不是在指令中。