[英]$rootScope.$apply() not working
我在角度运行方法中使用角度服务“AzureMobileClient”进行api调用,如下所示:
myModule.run(function ($rootScope, $localStorage, AzureMobileClient, Data) {
//Return user json object; store it in Data.customerUserJsonObject
AzureMobileClient.getCustomerUser(function (item) {
$rootScope.$apply(function () {
Data.customerServerRowObject = item;
console.log("rootScope applied");
});
console.log("myModule.run: item >");
console.log(item);}, $localStorage.phonenumber);
});
请注意,我有一个传递给run方法的数据共享服务“Data”,用于存储来自api回调的检索项。 对象“Data.customerServerRowObject”由api调用正确设置。 另请参阅$ rootScope。$ apply()在回调中调用,以跨越角度应用程序同步对象。 现在,每当我尝试在控制器中检索对象“Data.customerServerRowObject”时,我都会得到“未定义”值:
controllers.OrderVarification = function ($scope, Data) {
// ng-model="customerPhonenumber" in the view
$scope.customerPhonenumber = Data.customerServerRowObject.phonenumber;
}
这是因为控制器内的代码在api回调仍未完成时执行。 我也在做$ rootSope。$ apply()这对我的run函数没有影响
你需要使用promises,你不能只使用$ apply来同步转换异步操作:
myModule.run(function ($rootScope, $localStorage, AzureMobileClient, Data, $q) {
//Return user json object; store it in Data.customerUserJsonObject
var deferred = $q.defer();
Data.customerServerRowObject = deferred.promise;
AzureMobileClient.getCustomerUser(function (item) {
$rootScope.$apply(function () {
deferred.resolve(item);
console.log("rootScope applied");
});
console.log("myModule.run: item >");
console.log(item);}, $localStorage.phonenumber);
});
controllers.OrderVarification = function ($scope, Data) {
// ng-model="customerPhonenumber" in the view
Data.customerServerRowObject.then(function(data){
$scope.customerPhonenumber = data.phonenumber;
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.