gpt4 book ai didi

javascript - 从注入(inject)服务初始化的指令隔离范围

转载 作者:行者123 更新时间:2023-11-30 08:45:57 26 4
gpt4 key购买 nike

它必须很简单,但到目前为止我还做不到。

jsfiddle

想象一下,您有一个范围独立且依赖于您的服务的指令。为什么不能在声明范围的地方从服务初始化变量?但如果您在 Controller 中初始化该字段,则工作得很好。

app.directive('myDirective', function(i18n) {
return {
restrict: 'E',
replace: true,
scope:{
i18n:i18n
},
template: '<div ng-bind="i18n(\'myString\')"></div>',
controller: function($scope){
//$scope.i18n = i18n //it works if you put it here
}
};
});

i18n 只是我返回对象的函数的局部变量。就从变量初始化对象而言,它非常好……那么它是否存在某种 Angular 限制,并且与通过“@”、“=”……或其他方式绑定(bind)数据的可能性有关?有人可以为我阐明这件事吗...

最佳答案

引用The Comprehensive Directive API来自 Angular 文档的页面:

Scope

  • If set to true, then a new scope will be created for this directive. (...)
  • If set to {} (object hash), then a new "isolate" scope is created. (...)
    • @ or @attr - bind a local scope property to the value of DOM attribute. (...)
    • = or =attr - set up bi-directional binding between a local scope property and the parent scope property of name defined via the value of the attr attribute. (...)
    • & or &attr - provides a way to execute an expression in the context of the parent scope. (...)

换句话说,这不是指令定义对象的 scope 属性的用途。它不是作用域本身的定义,而是确定指令是否具有隔离作用域,如果有,它如何链接到其父作用域。

最好的解决方案就像您已经建议的那样,将 i18n 附加到 controllerlink 函数中的范围。

关于javascript - 从注入(inject)服务初始化的指令隔离范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22091312/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com