私はAngularJSに問題があります。私は問題を説明するために物事を簡素化しようとします。
イメージのアップロードを処理する必要がある指示文を作成しました。この流れは、このようになります。
イメージが存在する場合、サーバーは静的に配信されるイメージのURLを返します。 urlとディレクティブはサーバーから非同期にロードされるため、最初に読み込む方法はありません。私は属性として取得する変数
<my-directive vc-current-url="vm.data.profileURL"> </my-directive>
指令範囲
scope : { "currentURL" : '=vcCurrentUrl' }
だから、私のテンプレートで、私は{{scope.currentURL}}にできていますし、それがロードされるときに渡す - それだろう表示されます。しかし、私は、そのURLがロードされたときにはもっと多くのことをしなければなりません - それを別の関数(理由)に渡してください。だから私はちょうどウォッチャーを追加し、それが読み込まれるのを待つでしょうか?だがしかし。
scope.$watch(scope.currentURL, function (newValue, oldValue) {
console.log(' changed to ' + newValue + ' from ' + oldValue);
}, true);
にconsole.logは一度呼び出され、それは私が何をしないのです
changed to undefined from undefined
出力しますか?
私はAngular 1.5を使用しています。
EDIT 私は正しい変数を見ていないということでした。以下のコードは動作しません、それは
Error: currentURL is not defined
コードスロー:
scope.$watch('currentURL', function (newValue, oldValue) {
console.log(' changed to ' + newValue + ' from ' + oldValue);
});
Console.logは即座に実行され、未定義が来ている他のコード(FYIを参照)を待つことはありません。 – KreepN
いいえ、なぜすぐに実行されるのですか?変数が変更されたときに呼び出されるコールバック関数の中に配置されます。そしてその点については、中括弧が変更を受け取り、それらを表示するように出力する同じ時刻にコンソールログが呼び出されます – Rouz
'$ timeout'の中で' watch'を試してラップすることができ、DOMがレンダリングされた後に実行されます。 –