0

我正在尝试使用三个指令设置一个角度应用程序 - 容器、getter 和 setter。我把它放在 http://plnkr.co/edit/CoYLuVbiZTFWvNsN5r5L?p=preview

<container>
    <getter name="first"></getter>
    <getter name="second"></getter>
    <setter name="setter"></setter>
</container>

Container具有变量的范围value,可以通过getterand读取settergetter显示值,setter同时显示和更改值。

    angular.module("app").directive('container', function() {
      return {
        scope: {},
        template: '<h1>Container <input ng-model="value"/></h1><div ng-transclude>SCOPED1</div>',
        transclude: true,
        controller: ["$scope", "$window", function($scope, $window){
            $scope.value = "Hello"
        }]
      };
    });

两者gettersetter都有自己的隔离范围,但也有双向绑定container到 get 和 set 的范围value

    angular.module("app").directive('getter', function() {
      return {
        require: '^container',
        scope: {
            name: '@',
            value:'='
          },
        template: '<p>I am getter {{name}}, I got {{value}}</p>'
      };
    });

目前,getter可以setter使用访问container范围,$scope.$parent.$parent.value但这似乎太笨重了。我认为 usingscope:{value:'='}会设置两种方式绑定,但显然不是。

我究竟做错了什么?

http://plnkr.co/edit/CoYLuVbiZTFWvNsN5r5L?p=preview

4

1 回答 1

1

指令隔离范围不会自动链接到父范围中的变量。您必须告诉value应该value在父范围内的指令,就像您提供指令名称一样。

<container value="value">
    <getter name="first" value="value"></getter>
    <getter name="second" value="value"></getter>
    <setter name="setter" value="value"></setter>
</container>
于 2015-04-07T16:18:06.323 回答