我有一条指示,我正在尝试将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
中的字符串,但我可以直接使用它?
答案 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}