在带有范围变量的select上设置ng-init

时间:2015-01-27 16:57:56

标签: angularjs angularjs-ng-init

我有一条指示,我正在尝试将ng-init设置为带$scope的变量集

<select ng-init="safe.id=currentSafe" ng-options="safe as safe.name for safe in safes track by safe.id" ng-model="safe" ng-change="getSafeUrl(safe.id)"></select>

在指令的link函数中:

$scope.currentSafe = '72824ca7-99ab-4f16-a56c-3c98328c73fd';

这不起作用。但是,如果我将模板更改为:

<select ng-init="safe.id='72824ca7-99ab-4f16-a56c-3c98328c73fd'" ng-options="safe as safe.name for safe in safes track by safe.id" ng-model="safe" ng-change="getSafeUrl(safe.id)"></select>

为什么我无法使用$scope中的字符串,但我可以直接使用它?

1 个答案:

答案 0 :(得分:7)

1)您不应该使用select as with track by,它们不能同时协同工作。有关详细信息,请参阅文档。

2)不要使用ng-init来初始化应该在控制器上完成的属性,不监视ng-inited表达式,在指令本身的链接/控制器函数上设置$scope.safe.id。在您的情况下,您可能异步设置currentSafe,但到那时ng-init已经对它进行了评估。

<select ng-options="safe.name for safe in safes track by safe.id" 
        ng-model="safe" 
        ng-change="getSafeUrl(safe.id)"></select>

并设置:

$scope.safe = {id:whateverid}
相关问题