如何从视图中访问以下绑定?

时间:2013-12-03 15:37:21

标签: angularjs

demoApp是我的模块,非常简单。我已经按照一个很好的教程解释了自定义指令的创建,但是出现了一些东西,这是隔离的范围,可以保持范围的隔离。

这是angularJS代码:

demoApp.directive("superhero", function() {
    return {
        restrict: 'E',
        scope: {},
        controller: function ($scope) {

            $scope.abilities = [];

            this.addStrength = function() {
                $scope.abilities.push("strength");
            }

            this.addSpeed = function() {
                $scope.abilities.push("speed");
            }

            this.addFlight = function() {
                $scope.abilities.push("flight");
            }
        },

        link: function (scope, element) {
            element.addClass("button");
            element.bind("mouseenter", function() {
                console.log(scope.abilities);
            })
        }
    }
});

demoApp.directive("strength", function() {
    return {
        require:"superhero", //require superhero controller
        link: function (scope, element, attrs, superheroController) {
            superheroController.addStrength();
        }
    }
});

demoApp.directive("speed", function() {
    return {
        require:"superhero",
        link: function (scope, element, attrs, superheroController) {
            superheroController.addSpeed();
        }
    }
});

demoApp.directive("flight", function() {
    return {
        require:"superhero", 
        link: function (scope, element, attrs, superheroController) {
            superheroController.addFlight();
        }
    }
});

那么在视图中我这样做:

<superhero flight speed strength>Superman</superhero>
<superhero speed>Flash</superhero>
<superhero strength>Hulk</superhero>

现在,如果我想访问每个子节点的指令控制器范围会发生什么?想象一下,我想在视图中使用{{abilities}}绑定及其各自的属性?像这样:

 <superhero flight speed strength>Superman {{abilities}}</superhero>

我该怎么做?无法弄清楚。我应该使用隔离财产吗?喜欢:

scope: {
   abilities: "&"
},

事实是,在阅读和阅读这些孤立的范围之后,我还无法理解其用法和差异。

更新:

看起来这是来自AngularJS 1.2.3的“bug”,因为在JSFiddle提供的1.1.1版本中它可以工作。

也许它以不同的方式得到支持?我怎么能在1.2.3版本中做到这一点?

1 个答案:

答案 0 :(得分:1)

根据文件

https://github.com/angular/angular.js/blob/master/CHANGELOG.md#breaking-changes-1

我必须设置范围:true而不是范围:{}