Ответ 1
Вопрос 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