【发布时间】:2014-07-11 07:35:50
【问题描述】:
在指令中使用scope: { ... } 会引入一个隔离作用域,该作用域在原型上不会从其父作用域继承。但我一直使用它是出于不同的原因:一种通过两种方式数据绑定来声明 HTML 属性的便捷方式:
scope: {
attr1: '=',
attr2: '?='
}
要获得非隔离作用域,您必须使用scope: true,它不提供声明此类属性的机会。我现在发现自己需要一个具有非隔离范围的指令,但具有两种方式的绑定。实现这一目标的最佳方法是什么?
示例:在outer-directive 看来,我的用例是这样的:
<div ng-repeat="e in element">
<inner-directive two-way-attr="e.value"></inner-directive>
</div>
但inner-directive 与outer-directive 在同一个模块中。它不需要用隔离范围封装。事实上,我需要将$scope 继承用于其他目的,因此隔离范围不是一个选项。只是用一个HTML属性来建立这种双向通信是极其方便的。
【问题讨论】:
-
当你使用
scope: true时,你可以直接访问scope,那有什么问题吗? scope:true 将创建一个子作用域,该作用域在原型上从其父作用域继承,因此您将能够访问在指令中定义在父作用域上的值。 -
@Satpal:我知道这一点,但就我的目的而言,这是建立沟通的一种相当不雅的方式。实际上,您刚刚共享的链接说:“两个控制器通过 $scope 继承共享信息被认为是一种不好的形式”。 --- 我将在我的问题中添加一个用例示例。
-
@Satpal 有时需要类似组件的绑定设计(例如,指令通信的接口)用于与其他作用域一起使用的指令:true 指令,但由于无法使用隔离作用域新/隔离范围的非法组合。
标签: javascript angularjs angularjs-directive angularjs-scope