問題1:
由於要添加項目到acts
數組,你需要在$watch()設置第三個參數爲true
$scope.$watch('acts', function (neww, old) {
console.log(neww)
}, true);
演示:Fiddle
問題2 。
由於存在隔離範圍,因此需要調用$parent
示波器的功能
<input type="button" bn="" acts="acts" ng-click="$parent.addaction()" value="Add Action" />
演示:Fiddle
問題3:
當然可以,但你需要使用控制器
animateAppModule.directive('bn', function() {
return {
restrict: "A",
scope: {
acts: '='
},
link: function ($scope, iElement, iAttrs) {
$scope.$watch('acts', function (neww, old) {
console.log(neww)
}, true)
},
controller: function($scope){
$scope.dosomething = function(){
console.log('do something')
}
}
}
})
演示:Fiddle
的整體解決方案可能看起來像
<input type="button" bn="" acts="acts" addaction="addaction()" value="Add Action" />
JS
animateAppModule.controller('tst', function ($scope) {
$scope.acts = [];
$scope.addaction = function() {
$scope.acts.push({
a: "a,b"
})
}
})
animateAppModule.directive('bn', function() {
return {
restrict: "A",
scope: {
acts: '=',
addaction: '&'
},
link: function ($scope, iElement, iAttrs) {
$scope.$watch('acts', function (neww, old) {
console.log(neww)
}, true);
iElement.click(function(){
$scope.$apply('addaction()')
})
}
}
})
演示:Fiddle
爲什麼使用第二點? – 2013-04-05 04:50:41
我想爲按鈕設置事件處理程序。正如第三點所提到的,因爲我不能在隔離範圍內設置點擊處理程序,所以我不得不在父範圍中定義一個作爲點擊處理程序的函數。爲此,我使用'&'來評估父作用域中的addaction(),並使用'ng-click'使用該父作用域評估的屬性作爲點擊處理程序。如果我刪除'addaction =「addaction()」'ng-click'不起作用。您已更新問題編號的小提琴。 1不會觸發按鈕的點擊。請看看螢火蟲。 – rajkamal 2013-04-05 04:58:04