[英]Unable to return a reference to an AngularJS scope from a custom service
場景...
我需要更新存儲在作為當前作用域的祖父母的作用域的屬性中存儲的數據。當然,如果我嘗試簡單地寫入該屬性,則不是在更新祖父母作用域,而是在當前作用域中添加一個屬性。
解決方案 ...
若要構建實用程序服務來承載一個函數,您可以將當前范圍和要查找的屬性的名稱傳遞給該函數。 這將遞歸查找當前作用域的父鏈,直到找到要查找的屬性的“ hasOwnProperty”作用域。 然后它將返回對該范圍的引用。
結果...
當我從控制台運行服務時,會出現一些奇怪的行為。 我有一些console.log標記,這些標記可跟蹤服務的有效性。 每個日志輸出都是完美的,並且完全符合您的期望,即使是return語句即將記錄之前的console.log,也可以按您期望的那樣輸出到控制台,但是... return語句返回“ undefined” ... ?? ?
這是服務代碼...
angular.module("app.services", [])
.factory('UtilitiesService', [function () {
return {
findPropertyOwner: function (scope, propertyName) {
console.log("Looking at $scope.$id = " + scope.$id);
if (!scope.hasOwnProperty(propertyName) && scope.$parent != null) {
console.log("property not found on " + scope.$id);
this.findPropertyOwner(scope.$parent, propertyName);
} else {
console.log("found on " + scope.$id);
console.log(scope);
return scope;
}
}
}
}]);
關於為什么不返回范圍有任何想法嗎?
提前致謝 :)
編輯
感謝您的回答傑夫!
關於invarni的建議,如果我試圖將一個值提供給當前范圍而不將其“隱藏”在祖父母的父母那里,那么它肯定會起作用。 但是要注意的是,祖父母范圍將成為應用程序中許多其他范圍的祖父母。 我需要對一個后代范圍中的數據進行的任何更新,這些更新可用於不同視圖中的其他后代范圍。 因此,我的想法是,如果我更改祖父母范圍,它將繼續存在,並且由於原型繼承而可用於其他后代范圍。 如果有人知道更好的方法或看到此概念的缺陷,請告訴我!
再次感謝你的反饋!
您需要返回遞歸函數的結果:
console.log("property not found on " + scope.$id);
return this.findPropertyOwner(scope.$parent, propertyName);
我需要更新存儲在作為當前作用域的祖父母的作用域的屬性中存儲的數據。當然,如果我嘗試簡單地寫入該屬性,則不是在更新祖父母作用域,而是在當前作用域中添加一個屬性。
看來您可能使這一過程復雜化了。 如果您查看Angular中范圍繼承的工作方式,您會發現可以通過使您的孫子范圍能夠更改祖父母范圍上的對象的屬性的變量來解決問題,而不必它直接作為祖父母范圍的屬性。 那是使用$scope.model.myProp
類的東西,而不是$scope.myProp
,然后子作用域將不會創建自己的屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.