3

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直接使用できるのに、文字列を使用できないのはなぜですか?

4

1 に答える 1

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>

そして設定:

$scope.safe = {id:whateverid}
于 2015-01-27T17:01:25.837 に答える