在我的控制器上,我创建了一个负责初始化范围状态的函数。然后在ng-init
调用它,如下所示:... ng-init="init(value)"
其中value
是全局范围内的变量。问题是 - 它不起作用。角度是否允许传递变量? ng-init
内的任何内容是否仅在没有任何上下文的情况下进行评估,我必须准备一个字符串?
答案 0 :(得分:13)
我确信这不是“正确”的事情,但是它有效并且我使用它。
在窗口上设置一个全局变量..
<script type="text/javascript">
window.myCtrlData = {\"a\": \"It's a duck!\"};
</script>
..然后使用ng-init ..将变量的名称传递给控制器。
<div ng-controller="MyCtrl" ng-init="init('myCtrlData')">
..然后在init()
中检索全局变量function MyCtrl($scope) {
$scope.init = function (dataKey) {
if (dataKey && window[dataKey]) {
var data = window[dataKey];
// add data to scope
angular.extend($scope, data);
}
};
}
答案 1 :(得分:0)
尝试将value
替换为"hello"
,然后您会看到它有效,也许这与价值未定义有关,您应该尝试init('{{value}}')
然后看看是什么如果没有,那么你需要找出未定义value
的原因。
答案 2 :(得分:0)
好的,回答我自己的问题。
快速回答:你没有。
ng-init
仅接受已在范围内的变量。或者您可以创建一个内联。我实际上已经做了一段时间(传递字符串化的json变量),但它对某些数据不起作用(考虑遵循json:ng-init='"{\"a\": \"It's a duck!\"}'"
)
正确的解决方案是创建一个使用和传递全局变量的服务。我不确定这是否多更好,但我想它仍然比在控制器上使用全局变量更好。