2014-10-27 91 views
1

我有一個模板,它從服務中獲取數據。服務中的數據由指令更新。AngularJS:服務中的數據未更新

數據更新後,它不會在模板中更新。

// In my template 
{{service.get()}} 

// In my service 
.service('service', function($http){ 
    var _val = 5; 

    return{ 
     get:function(){ 
      return val; 
     }, 
     set:function(val){ 
      _val = val; 
     } 
    }; 
}); 

// In my directive 
var someDirective = angular.module('app.someDirective',[]); 

someDirective.directive('someDirective', ['service', function(service) { 
    return function(scope, element, attrs){ 
     $(element).on('scroll', function(event){ 
      service.set(15); 
     }); 
    }; 
}]); 

如果我在任何其他地方(如其他控制器)調用service.set(x)它可以100%正常工作。

也許有人知道,我做錯了什麼。 (非常感謝)

編輯 爲了讓多一點明確:

當頁面負載, '5' 則顯示(正確)。 但是,當值應該更新時,service.set()函數被正確調用(來自指令),但是模板中沒有任何變化。

如果我調用service.set()任何其他,它的工作原理(值在模板中更新)。

回答

1

您的事件發生在摘要循環之外。簡單的解決辦法:

$timeout(function() { 
    service.set(15); 
}); 
+0

非常感謝。而已。作品100%完美,應該如何。但我真的不知道這裏的問題是什麼,以及$ timeout如何幫助。 – Tream 2014-10-27 14:56:21

+0

'$ timeout'調度要在下一個摘要循環中運行的代碼。出於某種原因,您的事件發生在$ digest已經完成執行觀察者時。所以你可以手動指示它再次運行。 – dfsq 2014-10-27 15:09:36

1

速戰速決是包裝設定在$timeout。事情沒有得到更新的原因是因爲角色不知道在$(element).on火災時運行摘要。解決這個問題的另一種方法是使用$evalAsync