2

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

4

3 回答 3

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);
        }
    };
}
于 2013-09-22T23:20:15.267 回答
0

好的,发布我自己问题的答案。

快速回答:你没有。

ng-init只接受已经在范围内的变量。或者您可以创建一个内联。我实际上这样做了一段时间(传递字符串化的 json 变量)但它对某些数据效果不佳(考虑以下 json: ng-init='"{\"a\": \"It's a duck!\"}'"

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

于 2013-09-20T08:29:03.447 回答
0

它确实有效,尝试替换value"hello",您会看到它有效,也许这与未定义的值有关,您应该尝试init('{{value}}')看看它做了什么,如果没有,那么您需要找出value未定义的原因。

于 2013-09-14T00:04:07.530 回答