【发布时间】:2013-04-06 21:29:37
【问题描述】:
假设我这样做:
sAngular.app.directive('dostuff', ['$compile', function($compile){
return {
restrict : 'C',
scope: {
someVar : '='
},
link : function(scope, element, attrs){
element.click(function(){
//do stuff
scope.someVar = 'somethingelse';
var dropdownOutput = template();
var compiledOutput = $compile(dropdownOutput)(scope);
scope.$apply();
});
}
}
}]);
我怎样才能让这个指令的范围从父范围继承一个变量,但仍然让它成为一个“隔离”范围
例如来自角度文档:
= 或 =attr - 在本地范围属性和通过值定义的名称的父范围属性之间设置双向绑定 attr 属性。如果未指定 attr 名称,则属性 假定名称与本地名称相同。范围的给定和小部件定义:{ localModel:'=myAttr' },然后小部件范围属性 localModel 将 在父作用域上反映 parentModel 的值。任何更改 parentModel 将反映在 localModel 和任何更改 localModel 将反映在 parentModel 中。
但是,在这种情况下,由于“localModel 中的任何更改都将反映在 parentModel 中”,如果我在该指令的范围内修改变量,然后在这种情况下执行 scope.apply(),它将相应地反映在父范围中,并且父模板将随着更改而更新
我也尝试将 "scope : true" 作为参数,但更改了范围,然后是 scope.$apply();也将传播到原始范围...
有没有办法让我可以从父范围复制一个范围,并且该范围内的变量仍然有更改不会传播到父范围?
【问题讨论】:
-
不是 100% 清楚你想要什么......哪里有提供情况概述的演示?真的不清楚
compiledOutput在做什么 -
@pillarOfLight 如果您不想将隔离作用域属性更改传播到父作用域,请使用
@而不是=。抱歉更正了 -
@rajkamal,使用 & 会将作用域变量转换为函数,而不是让作用域变量从父作用域变量继承
-
@rajkamal,使用 @ 也不起作用......这应该引用 dom 属性元素,并且该值将始终是字符串而不是范围变量是什么(请参阅docs.angularjs.org/guide/directive scope部分)
-
你试过在指令中使用 scope.$parent.variableName 吗?
标签: javascript angularjs angularjs-directive angularjs-scope