2016-07-07 6 views
1

私は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); 
}); 
+0

Console.logは即座に実行され、未定義が来ている他のコード(FYIを参照)を待つことはありません。 – KreepN

+0

いいえ、なぜすぐに実行されるのですか?変数が変更されたときに呼び出されるコールバック関数の中に配置されます。そしてその点については、中括弧が変更を受け取り、それらを表示するように出力する同じ時刻にコンソールログが呼び出されます – Rouz

+0

'$ timeout'の中で' watch'を試してラップすることができ、DOMがレンダリングされた後に実行されます。 –

答えて

1

私は間違っていました。

オースティンとアロンが正しいとは言いましたが、変数名の前後にアポストロフィがあることに気づきませんでしたが、私はそれらを持っていません。

会話の後、ウォッチャー機能を$ timeoutに配置しようとしました。変数は次のサイクルで読み込まれ、私はいくつかの奇妙な構文解析メッセージ(url.com/variable.jpgは有効な変数名ではありません)を取得しました。

その時点で、アポストロフィの中にvar名を入れないと、var値(または未定義)が使用されることに気付きました。

なぜ私はそのコンソールログと私は実際に

$watch(undefined, function() {...}); 

とウォッチャー通常、初期化時に一度呼び出されたんでしたを取得しました。皆、ありがとうございました。

1

まず、これはこれはあなたがスコープいる方法です、あなたは

scope.$watch('currentURL' 

第2の値を見てどのようであるがdefは次のようになります

scope : { "currentURL" : '=vcCurrentUrl' } 

So

scope.$watch('currentURL', function (newValue, oldValue) { 
    console.log(' changed to ' + newValue + ' from ' + oldValue); 
}); 

あなたは正しくスコープ変数を参照されませんでした:ビューのあなたのディレクティブは

<my-directive data-vc-current-url="vm.data.profileURL"> </my-directive> 
+0

最初のエラー:あなたが言ったことを入れた場合、currentURLは定義されていません。 2番目のタイプは問題のタイプミスです - 名前とビューは同じ名前です。 – Rouz

+0

@Rouz You平均スコープ。$ w atch( '"currentURL"' '? –

+0

この解決策は動作します。間違いは私がスコープを入れたことです。$ watch(scope.currentURL ...スコープではありません。$ watch( 'currentURL' – Rouz

1

代わりにこれを試してみてくださいする必要があります。

+0

私はすでに彼の答えを投稿した(そして削除した)友達に言ったように - これは正しくありません。私はこのエラーがスローされますエラー:currentURLは定義されていません – Rouz

+0

私はあなたに謝罪し、あなたには正しいと私はなかった。私は何が間違っていたか、どのようにそれを見つけた – Rouz

+0

@ルーズ私が正しい答えだったら返答しました –

関連する問題