【问题标题】:Angular Isolate Scope for nested directives嵌套指令的角度隔离范围
【发布时间】:2015-04-07 16:13:33
【问题描述】:

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

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

Container 有一个变量value 的作用域,getter 和setter 可以读取该变量。 getter 显示值,而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"
        }]
      };
    });

getter 和 setter 都有自己的隔离作用域,但也有到container 作用域的双向绑定以获取和设置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 可以使用 $scope.$parent.$parent.value 访问 container 范围,但这似乎太笨拙了。我认为使用 scope:{value:'='} 会设置两种方式绑定,但显然不是。

我做错了什么?

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

【问题讨论】:

标签: javascript angularjs isolate-scope


【解决方案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>

【讨论】:

  • 谢谢你 - 不幸的是我已经更正了代码 (plnkr.co/edit/CoYLuVbiZTFWvNsN5r5L?p=preview) 但它似乎没有工作。
  • 您是否希望它从容器指令中提取值?这根本与父范围无关。
  • 哦,抱歉,这是我的 .js 文件中的一个错误 - 加上 @Sam 的评论,这一切都说得通!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-02
相关资源
最近更新 更多