是否有可能建立一個$watch
裏面有服務對象的數組(我喜歡$watch
聲明本身是裏面的服務)?
$觀看服務內?
回答
通過注入$rootScope
並使用函數第一個參數到$watch
方法,您可以向該組表中添加任何表達式。僞代碼:
$rootScope.$watch(function() {
return //value to be watched;
}, function watchCallback(newValue, oldValue) {
//react on value change here
});
不要忘記關於$watch
方法的第三個布爾參數。如果要深入觀察整個對象以進行更改,則需要指定true
。
服務其本質都是一樣的類和內部方法。你可以設置你從你的控制器誰的說法是範圍和適用的手錶式調用一個方法:
app.service('myservice',function(){
this.listen = function($scope) {
$scope.$watch(function(){return someScopeValue},function(){
//$scope.dosomestuff();
});
}
});
//your controller
function myCtrl($scope,myservice) {
$scope.listen = function() {
myservice.listen($scope);
}
//call your method
$scope.listen();
}
更新:如果你想觀看服務中的私有局部變量,請參閱接受使用$ rootScope回答。如果您試圖在本地範圍內觀察$ scope變量,那麼這是您的最佳選擇。他們正在實現兩個完全不同的目標。
這可能看起來像一個愚蠢的問題,但你爲什麼把'myservice.listen($ scope)'放在一個函數內?它是否容易在整個代碼中重用它,或者是否有一些重要的原因?另外,如果我把$ watch放在工廠裏,它還能工作嗎? –
你能澄清你想實現什麼?據我所知,你從服務器獲取一系列對象作爲你的模型。然後,它目前還不清楚:
- 你想驗證如果陣列中的一些對象已經改變 (也許因爲到服務器的最後一次通話的情況下,你做反覆 池)?
- 是否要驗證用戶是否已通過某些前端控制元素更改了陣列中的某些對象?
在情況1中,您並不真的需要使用$ watch(或者更確切地說$ watchCollection),但是您應該遍歷從服務器收到的數組並驗證更改(與$ watchColleciton相同)。如果對象與您當前擁有的對象不同,則在此元素上調用object。$ save()。
在第二種情況下,使用$ watchCollection()在$範圍,如果你把你在$ rootScope數組作爲參數傳遞給您的服務功能或使用$ rootScope。
我可以爲您提供真正的代碼,如果你能澄清的場景。
嘿剛剛有了一個情況,我對2個不同的控制器一個相當大的手錶設置。
因爲我不想重複我剛纔定義我的服務才能正常運行任何代碼:
angular
.module('invoice')
.factory('invoiceState', function() {
var invoice = {
client_info: {
lastname: "",
firstname: "",
email: "",
phone: "",
id_client: "",
...
}
}
invoice.watchAccommodation = function (newVal, oldVal) {
var accommodation = newVal;
//Whatever you would normally have in your watch function
}
然後我就可以調用這個函數中的任何控制器的手錶爲我注入了服務
function NewInvoiceCtrl(invoiceState) {
$scope.$watch('invoice.accommodation',invoiceState.watchAccommodation, true);
}
我沒有與AngularJS太多的經驗,所以我真的不能進入這個方法的性能方面,但它的工作原理;)
- 1. Windows服務觀看網絡
- 2. 看門狗贏得服務觀看另一個贏得服務
- 3. 運行windows服務觀看服務正在運行增長內存(泄漏)
- 4. Angular JS $在服務對象上觀看
- 5. 角度$觀看遞歸服務函數
- 6. 服務 - 觀看不工作在jekyll
- 7. 觀看服務獲取文件句柄
- 8. 如何殺死觀看服務線程
- 9. 在java中運行shell觀看服務
- 10. 服務中的角度觀看陣列
- 11. AngularJS:$觀看服務中的其他服務
- 12. WCF Web服務正在觀看其他WCF Web服務
- 13. $在工廠內觀看
- 14. 觀看內存的程序
- 15. 簡單$觀看服務不起作用,但可以訪問服務
- 16. 從控制器中觀看服務中的更改
- 17. Webpack開發服務器沒有觀看或更新文件
- 18. Kubernetes API服務器斷開連接觀看
- 19. 如何使用Spring RESTful Web服務觀看視頻
- 20. 如何觀看Web服務器上的所有文件?
- 21. jdk 7觀看服務api和NFS文件共享
- 22. $觀看服務變量或$使用AngularJS廣播事件
- 23. 使用服務和BroadcastReceiver停止觀看應用程序
- 24. 角度$範圍$觀看服務函數返回值
- 25. 在觀看功能之前運行服務器功能
- 26. Grunt在服務器上觀看LiveReload網站
- 27. Webpack - 觀看不看
- 28. 服務,觀察和活套
- 29. 調試Windows服務並嘗試查看它看到的內容
- 30. 在gdb中觀看內存範圍?
,如果你不介意的話,我想你笑w我們如何引用來自第一個函數的返回服務值。我盡我所能,但沒有成功觀察變化。一次又一次地返回同樣的價值。 – Birowsky
@Birowsky你嘗試過'$ watchCollection'嗎? –
因爲它正在監視整個應用程序的rootScope,所以這沒有幫助。 – btm1