2016-07-01 19 views
2

似たような問題を抱えているが、通常のスコープを持つ人が2人います。$ applyは私にとっては機能しません($ digestはすでに進行中です)。今日私の頭を叩いている。

私の指示の簡略化された完全版を以下で見つけてください。

  1. initialize()は、myValueを初期値に設定します。
  2. $ rootScopeイベントがキャッチされました。
  3. 約束が解決されています。
  4. $ localStorageが更新されます
  5. console.log(myValue)が正しい値を返します。

私のビューは更新されません。どうしたの?!

(function() { 
 
    'use strict'; 
 

 
    angular 
 
    .module('myApp') 
 
    .directive('myDirective', myDirective); 
 

 
    function myDirective($rootScope, $localStorage, MyPromise, MyService) { 
 
    var linkFunction = function (scope, element, attributes) { 
 

 
     scope.myValue = null; 
 

 
     $rootScope.$on('someEvent', function (event, data) { 
 

 
     MyPromise().get({}, function (result) { 
 
      $localStorage.result = result; 
 
      scope.myValue = MyService.getFromLocalStorageAndReturnStuff(); 
 
      console.log(scope.myValue); 
 
     }); 
 
     }); 
 

 
     initialize(); 
 

 
     function initialize() { 
 

 
     scope.myValue = MyService.getFromLocalStorageAndReturnStuff(); 
 

 
     } 
 
    }; 
 

 

 
    return { 
 
     restrict: 'A', 
 
     transclude: true, 
 
     replace: true, 
 
     scope: { 
 
     someProperty: '=myProperty' 
 
     }, 
 
     link: linkFunction, 
 
     templateUrl: 'myTemplate.html' 
 
    }; 
 
    } 
 
})();
{{myValue}}

+0

呼び出そうとしましたキャッシュ –

答えて

0

applyAsync関数の内部で設定された変数の操作を行い、モデルの変更を見ていません(scope.someProperty)は、イベントが発生したときにも同様に変化しています。

これを見ると、ビューに反映される範囲が変更されます。

私はこれが完璧な解決策ではないことを認識しています。本当に何らかのイベントに反応しなければならない場合は、他の人にとって役立つかもしれないので、私の解決策を提供したいと思います。

誰かが本物の問題に答えることができれば、私は彼の答えを受け入れることができます。

(function() { 
 
    'use strict'; 
 

 
    angular 
 
    .module('myApp') 
 
    .directive('myDirective', myDirective); 
 

 
    function myDirective($rootScope, $localStorage, MyPromise, MyService) { 
 
    var linkFunction = function (scope, element, attributes) { 
 

 
     scope.myValue = null; 
 

 
     scope.$watch('someProperty', function(newVal){ 
 
     
 
     if(newVal!==null){ 
 
      MyPromise().get({}, function (result) { 
 
      $localStorage.result = result; 
 
      scope.myValue = MyService.getFromLocalStorageAndReturnStuff(); 
 
      }); 
 
     } 
 
     
 
     }); 
 
     
 
     initialize(); 
 

 
     function initialize() { 
 

 
     } 
 
    }; 
 

 

 
    return { 
 
     restrict: 'A', 
 
     transclude: true, 
 
     replace: true, 
 
     scope: { 
 
     someProperty: '=myProperty' 
 
     }, 
 
     link: linkFunction, 
 
     templateUrl: 'myTemplate.html' 
 
    }; 
 
    } 
 
})();

0

リンク機能は、そこで何を私のために働いていることは、私は外部のスコープのプロパティを持っているということです

scope.$applyAsync(function(){ 
//set here 
}); 
+0

をクリアしようとする 'scope.myValue = MyService.getFromLocalStorageAndReturnStuff();' $ applyAsync内にあります。例外もビューの変更も影響を与えません。 – LBA

+0

スコープを呼び出そうとしました$セットの後にapplyを適用し、applyAsyncを削除してスコープを分離しないようにしてください –

+0

ありがとうございましたが、私のコメントを見て、すでにスコープを試しました。 – LBA

関連する問題