现在click="clickvalue"
会触发$ watch,这意味着它已被绑定'到MyContoller的点击值
<div ng-controller='MyController'>
<button ng-click='click()'>Call function inside directive</button>
<dir clicked="clickedvalue"></dir>
</div>
app.js
app.controller('MyController', ['$scope', function($scope) {
$scope.clickedvalue = false;
$scope.click = function() {
$scope.clickedvalue = !$scope.clickedvalue;
};
}
]);
appDirectives = angular.module('app.directives', []);
appDirectives.directive('dir', [function() {
return {
restrict: 'E',
scope: {
clicked: '='
},
link:function(scope, element, attrs ) {
scope.$watch('clicked', function() {
console.log('innerFunc called');
})
}
};
}]);
答案 0 :(得分:2)
如果我理解你的话,&#39; =&#39;不要求您使用{{interpolation}},&#39; @&#39;会。
此外,请注意您设置$ watch on属性,而不是在控制器的clickedvalue上。
答案 1 :(得分:1)
在角度js中{{}}
表示单向绑定&amp;当您使用指令并使用=
声明隔离范围时,这意味着范围变量的双向绑定。如果其中一个变量发生变化,则相对范围会更新。
scope: {
clicked: '='
},
在您的情况下,clicked
已与clickedvalue
进行了映射。当clicked
的值得到更新时,它还会更新clickedvalue
的值,这是隔离的范围指令< / p>