2016-06-21 4 views
-1

ブラウザウィンドウのinnerWidthのスコープ変数を以下のコードを使用して設定しようとしています。これはコンソールで見たときに機能しますが、関数は$ scope変数を更新していません。どうして?

angular.element($window).bind('resize', function() { 
    console.log('resize', $window.innerWidth); // I can see change here 
    $scope.window_width = $window.innnerWidth; // no change here 
}); 
+0

'console.log($ scope.window_width)'とは何ですか? –

答えて

2

ダイジェスト角度を強制する必要がありますここで$digestサイクルを起動します。それ以外の場合は、変更があることを角度で知らせません。

angular.element($window).bind('resize', function() { 
    console.log('resize', $window.innerWidth); 
    $scope.window_width = $window.innerWidth; 
    $scope.$evalAsync(); 
}); 

$scope.$evalAsync()あなたが質問を入力するとき、それはかもしれ愚かな間違いをした後、$timeout(詳細here)のダニ同じjsのイベント内で発火の大きなチャンスと

+0

これは間違っています。スコープ変数を更新するときに適用する必要はありません –

+0

jQuery/jQLiteから実行するときに行う必要があります –

+0

Async()などの機能はありません – MFB

-1

これを試してみてください:

$scope.$apply(function() { $scope.window_width = $window.innnerWidth; }) 

あなたはDOMイベントをバインドするので、手動で持っているので、あなたは、角度の外に住んjQliteで何かを結合している相

+0

これは間違っています。スコープ変数を更新するときに適用する必要はありません –

+0

角度のドキュメントを読む...彼はダイジェストフェーズ外のイベントにバインドします。角度検出の変更には、ダイジェストフェーズを呼び出す必要があります。 – Silvinus

+0

これをバインド関数の中に置いていますよね?動作していないようです – MFB

3

をダイジェストサイクルを呼び出します。

$scope.window_width = $window.innnerWidth; //innnerWidth should be innerWidth 

とリサイズが何かであるので、あなたが$scope.$digest();を呼び出すことによって、手動でダイジェスト・サイクルを実行するために必要なスコープ変数を更新した後、角度の外で起こるので、我々はスコープに更新するものがあるに角度を指示する必要があります。

$digest()の代わりに何が使えますか?あなたは$timeoutでコードをラップすることができます

  1. それはダイジェスト・サイクルをトリガすること自己

    $timeout(function() { $scope.window_width = $window.innerWidth; });

  2. 使用$scope.$apply();

    よう

    $scope.window_width = $window.innerWidth; $scope.$apply();

彼re:a demo

+0

ああ私の神...私はとても恥ずかしいです – MFB

関連する問題