AngularJS:作用域不能跨指令共享
AngularJS : Scope not shared across directives
我在同一标签上有2个指令,<settings>
和<modal>
。settings
提供一个模板,而modal
创建一个隔离的作用域:
jsfiddle
var app = angular.module('app', []);
app.directive('settings', function () {
return {
restrict: 'E',
template: '<div>SETTINGS</div>',
link: function (scope) {
console.log('settings', scope.$id);
}
};
});
app.directive('modal', function () {
return {
restrict: 'A',
scope: {},
link: function (scope) {
console.log('modal', scope.$id);
}
};
});
但是,它们不会共享相同的作用域,如日志所示:
<settings modal="settings"></settings>
settings 002
modal 003
直到1.2.0rc3版本,兄弟指令在创建时共享相同的隔离作用域。
从1.2.0版本开始,您不能(也不应该)从针对此隔离作用域编译的内容外部访问隔离作用域。你不应该这样做,因为你在两个指令之间创建了一个隐藏的关系。如果单例模式可以应用到你的用例中,最好通过require
属性使用指令的控制器需求,或者通过注入的服务共享信息。
这最终与另一个关于具有隔离作用域版本冲突的指令的问题密切相关
scope: {}
选项总是为指令创建一个孤立的作用域,它不关心其他指令
app.directive('modal', function () {
return {
restrict: 'A',
scope: false,
link: function (scope) {
console.log('modal', scope.$id);
}
};
});
scope: false不会创建新的隔离作用域。如果你想让两个指令在它们之间工作,使用指令上的控制器,这样你就可以在它们之间共享数据。
相关文章:
- 使用 TypeScript 在 AngularJS 中的指令之间共享来自异步调用的数据
- Angular 获取共享指令的所有元素的列表
- 我怎样才能在角度指令中共享范围和传递数据
- 在指令和嵌套指令之间共享模型
- 将数据从指令共享到控制器
- 在指令之间共享范围 - 缺少$http
- 从指令控制器到控制器的角度共享数据
- AngularJS在父级和子级范围指令之间共享数据
- 如何在嵌套指令之间共享变量
- AngularJS指令,没有模板,并从父范围共享更新
- 在指令作用域和控制器$scope之间共享数据
- 如何使ng中的每个指令重复以共享同一个ng模型
- 多个指令需要共享同一个私有作用域
- 实例化一个对象,使其可以与多个指令共享
- 正在与子指令作用域共享作用域对象
- 在同级指令之间共享数据
- 如何将父指令的属性与子指令共享
- 多个指令共享同一个作用域
- Angularjs 2指令共享link函数
- AngularJS:作用域不能跨指令共享