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

Jon*_*ing 3 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>
Run Code Online (Sandbox Code Playgroud)

link我的指令函数中:

$scope.currentSafe = '72824ca7-99ab-4f16-a56c-3c98328c73fd';
Run Code Online (Sandbox Code Playgroud)

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

<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>
Run Code Online (Sandbox Code Playgroud)

为什么我不能使用字符串,$scope但我可以直接使用它?

PSL*_*PSL 7

1)你不应该使用select作为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>
Run Code Online (Sandbox Code Playgroud)

并设置:

$scope.safe = {id:whateverid}
Run Code Online (Sandbox Code Playgroud)