它必须简单,但到目前为止我无法得到它。
成像您有一个具有隔离范围的指令,并且具有来自您服务的依赖性。为什么不能在声明范围的地方初始化服务中的变量?但是如果在控制器中初始化该字段,则可以正常工作。
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只是我返回一个对象的函数的局部变量。在从变量初始化对象方面它是完全正确的......所以它是某种角度限制并且与通过'@','='...或什么来绑定数据的可能性有关? 能否有人为我揭开这件事......
答案 0 :(得分:4)
参考Angular Docs的The Comprehensive Directive API页面:
范围
- 如果设置为true,则将为此指令创建新范围。 (...)
- 如果设置为{}(对象哈希),则会创建一个新的“隔离”范围。 (......)
- @或@attr - 将本地范围属性绑定到DOM属性的值。 (...)
- = or = attr - 在本地范围属性和通过attr属性的值定义的name的父范围属性之间设置双向绑定。 (...)
- &安培;或&amp; attr - 提供在父作用域的上下文中执行表达式的方法。 (...)
换句话说,这不是指令定义对象的scope
属性的含义。它不是范围本身的定义,而是确定该指令是否具有隔离范围,如果是,则如何链接到其父范围。
最佳解决方案是按照您的建议,将i18n
附加到controller
或link
函数的范围。
答案 1 :(得分:1)