[英]Force Two-Way-Binding to Take Effect
我正在编写AngularJS 1.x指令(我们称之为MyDirective
)。 其范围声明如下:
scope: {
accessor: '='
}
在其link
功能中,我正在向该accessor
字段分配一个新对象,如下所示:
scope.accessor = {
// methods such as doSomethingToMyDirective()
};
现在,我使用$compile
动态实例化此指令:
var element = $compile('<div data-my-directive data-accessor="directiveAccessor"></div>')(myScope);
一旦运行,我当前的作用域( myScope
)将具有一个directiveAccessor
属性,该属性引用在该指令内创建的对象实例。
问题:该字段不是立即可用的。
换句话说,一旦运行$compile
,就无法在下myScope.directiveAccessor
命令中立即访问myScope.directiveAccessor
。 当我稍后检查范围时,该字段在那里,并且可能只需一个$timeout
就足够了。
通过一些断点,我可以观察到确实在执行$compile
就创建了该对象。 accessor
上的内部范围已经指向的对象。 但是,似乎将双向复制将值从内部作用域中的accessor
复制到myScope.directiveAccessor
的双向绑定直到以后才变为活动状态。
有没有办法强迫AngularJS立即复制双向绑定的值(即不等待任何承诺)?
使用表达式绑定( &
)立即设置父范围变量:
app.directive("myDirective", function () {
return {
scope: { onPostLink: "&" },
link: postLink
};
function postLink(scope, elem, attrs) {
scope.accessor = {
doSomethingToMyDirective: function() {
return "Hello world";
}
};
scope.onPostLink({$event: scope.accessor});
scope.$on("$destroy", function() {
scope.onPostLink({$event: null});
});
}
})
用法:
<my-directive on-post-link="directiveAccessor=$event">
</my-directive>
销毁隔离范围时,请确保将引用为null
。 否则,代码就有产生内存泄漏的风险。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.