如果指令包含在另一个指令中,我如何在隔离范围内添加双向数据绑定属性



如果指令包含在另一个指令中,我如何在隔离范围内添加双向数据绑定属性??index.html

<event event-width width="width"></event>

directive.js

ll.directive('event',function() {
return {
    restrict: 'E',
    scope:{              //error !!! Error: [$compile:multidir] Multiple directives [event, eventWidth] asking for new/isolated scope on
        event: '='       
    },
    templateUrl: function (attr, elem) {
        return 'app/template/' + elem.template;
    },
    link:function(scope,elem,attr){
        console.log(scope.width)
    }
}
});
ll.directive('eventWidth',function() {
    return {
        restrict: 'A',
        scope:{
            width: '='
        },
        link:function(scope,elem,attr){
        }
    }
});

编译器抛出此错误:错误:[$compile:multer]多个指令[event,eventWidth]要求上的新/隔离作用域

如何读取和设置在事件作用域外部声明的width属性??请用优雅的方式;)

Angular可以嵌套指令,并具有处理指令的功能。您正试图向同一个元素添加两个都具有独立作用域的指令,这显然是它不喜欢的。

您收到此错误是因为它们都有一个独立的作用域,请从其中一个作用域中删除该独立作用域,它就会工作

阅读这篇关于指令中作用域的文章http://tech.blinemedical.com/sharing-data-between-child-and-parent-directives-and-scopes-in-angularjs/

你可以想象这会如何混淆它。

或者,你也可以像这样把它们筑巢这个有很多解决方案

<event>
  <event-width width='500'></event-width>
</event>

所以现在您可以将事件宽度视为事件的子指令。在指令中,您可以添加以下内容。。。

ll.directive('eventWidth',function() {
  return {
    restrict: 'A',
    require: '^event',
    scope:{
        width: '='
    },
    link:function(scope,elem,attr, eventCtrl){
    }
  }
});

添加require:'^event'将允许您访问该指令控制器。您可以将其传递到子指令控制器中,如我所示的"eventCtrl"。然后,父控制器中使用"this"的任何内容都可以从子控制器使用。

这可能会变得更加复杂和稳健,但我建议研究require-on指令和child指令。

这篇文章可以帮助如何在angularjs指令

中需要控制器

请问您为什么要嵌套指令?通常常见的做法是拥有指令文件夹,然后在指令文件夹中将每个指令创建为自己的js文档。因为每个指令都应该执行它执行的一个特定任务。然后您将在DOM中引用这些指令嵌套指令剥夺了代码的模块性

看起来你得到的错误代码似乎与这个嵌套指令有关。从本质上讲,指令应该非常简单,实际上,只有当您认为此任务是可重用和经常使用的任务时,才应该创建指令。(比如导航栏的购物车指令等)

我会试着重新思考你希望如何完成这项任务。

最新更新