14

请参考这个小提琴的问题。http://jsfiddle.net/AQR55/

1)为什么附加到隔离范围属性的手表 - 双向绑定到父属性,不会在更改父范围属性时触发。

在小提琴中,在更改绑定的父范围属性时,没有触发下面提到的手表。

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

2) ng-click="addaction()" addaction="addaction()"。这段代码可以以更优雅的方式放置吗?因为,要在隔离范围内执行操作,似乎我们需要设置双向绑定和附加到 ng-click。

3)我可以在隔离范围内声明方法,如下所示?如果我这样做,我会收到 .js 错误。

<isolate-scope-creating-cmp ng-click="isolateCmpClickHandler()"></isolate-scope-creating-cmp>
scope:{
    isolateCmpClickHandler:function(){
      //If i do like this, I'm getting .js error

    }
}
4

1 回答 1

22

问题1.
由于是向acts数组中添加项,所以需要将$watch()中的第三个参数设置为true

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

演示:小提琴

问题2.
既然有一个隔离作用域,就需要调用$parent作用域的函数

<input type="button" bn="" acts="acts" ng-click="$parent.addaction()" value="Add Action" />

演示:小提琴

问题 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')
            }
        }
    }
})

演示:小提琴

整体解决方案可能看起来像

<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()')
            })
        }
    }
})

演示:小提琴

于 2013-04-05T04:49:11.703 回答