使用范围变量在 select 上设置 ng-init

set ng-init on select with scope variable

我有一个指令,我正在尝试将 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) 您不应该使用 select as with track by,它们不是为协同工作而设计的。有关详细信息,请参阅文档。

2) 不要使用 ng-init 来初始化 属性,这应该在控制器上完成,不会监视 ng-inited 表达式,在 [=22= 上设置 $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}