如何将变量传递给ng-init调用?

时间:2013-09-13 23:23:10

标签: angularjs

在我的控制器上,我创建了一个负责初始化范围状态的函数。然后在ng-init调用它,如下所示:... ng-init="init(value)"其中value是全局范围内的变量。问题是 - 它不起作用。角度是否允许传递变量? ng-init内的任何内容是否仅在没有任何上下文的情况下进行评估,我必须准备一个字符串?

3 个答案:

答案 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!\"}'"

正确的解决方案是创建一个使用和传递全局变量的服务。我不确定这是否更好,但我想它仍然比在控制器上使用全局变量更好。