Angularjs 引用范围时来自工厂的数据不显示该值。安格拉斯
我对AngularJS很陌生,遇到了一个难题。我试图从工厂获取一个值,并且能够获取数据,我将console.log附加到函数以进行检查,但是当我尝试将这些数据附加到作用域并再次使用console.log进行检查时,我在日志上收到一条未定义的消息 我尝试创建一个对象范围$scope.formWO={};在那里引用了它,但我还是得到了同样的信息。我不知道在系统读取或执行该功能之前,作用域之间是否存在冲突,或者是否存在提前显示页面的问题。我已经读了很多关于示波器的书,但不知怎么的,这个问题似乎使我的开发完全停止了。我不知道哪一个是哪一个,我很想得到启发 这里是修剪下来的控制器只是给你一个想法Angularjs 引用范围时来自工厂的数据不显示该值。安格拉斯,angularjs,Angularjs,我对AngularJS很陌生,遇到了一个难题。我试图从工厂获取一个值,并且能够获取数据,我将console.log附加到函数以进行检查,但是当我尝试将这些数据附加到作用域并再次使用console.log进行检查时,我在日志上收到一条未定义的消息 我尝试创建一个对象范围$scope.formWO={};在那里引用了它,但我还是得到了同样的信息。我不知道在系统读取或执行该功能之前,作用域之间是否存在冲突,或者是否存在提前显示页面的问题。我已经读了很多关于示波器的书,但不知怎么的,这个问题似乎使我的开
myApp.controller('ordersCtrl',
function ordersCtrl($scope, ngTableParams, dealerData, costElementData, totNoData, $http, $ekathuwa, $rootScope, $location, userService, $filter){
$scope.formWO = {};
$scope.addWorkOrder = function(){
$scope.modalHeader = "ADD NEW WORK ORDER";
$scope.modalType = "Add";
$ekathuwa.modal({
id: "modalWO",
scope: $scope,
templateURL: "./tpl/modal-wo.html"
});
$scope.$watch('formWO.dealer', function(newDealer, oldDealer){
if ( newDealer === oldDealer) {
return;
}
$http.get('api/profile/'+$scope.formWO.dealer).
success(function(data, status, headers, config){
$scope.formWO.outletno = data.outletno;
});
if ($scope.dealer === newDealer) {
return;
}
});
}
$scope.submitAddWorkOrder = function(cost_element, desc, ets, etc, cost_estimate, dealer){
totNoData.getTotNo(function(noData){
$scope.formWO.totno = noData;
});
console.log($scope.formWO.totno);
$scope.tableParams.reload();
}
});
这是工厂:
myApp.factory('totNoData', function($http, $log){
return {
getTotNo: function(successcb){
$http({method: 'GET', url: 'api/totno'}).
success(function(data, status, headers, config){
successcb(data);
}).
error(function(data, status, headers, config){
$log.warn(data, status, headers, config);
});
}
}
});
您可能想做的是在传递给“getToNo”的匿名回调函数中移动日志和重载。比如:
$scope.submitAddWorkOrder = function(cost_element, desc, ets, etc, cost_estimate, dealer){
totNoData.getTotNo(function(noData){
$scope.formWO.totno = noData;
console.log($scope.formWO.totno);
$scope.tableParams.reload();
});
}
实际上,日志和重新加载是在调用回调之前进行的。订单是这样的:
调用getTotNo方法
发送http请求
返回到SubmitedWorkOrder
日志$scope.formWO.totno未定义
调用$scope.tableParams.reload;
... 事件循环/摘要
收到http响应,调用了成功方法
调用回调
已设置$scope.formWO.totno
异步的胜利
编辑:
更好的to模式是返回从$http调用返回的承诺
因此,将服务更改为:
getTotNo: function(){
return $http({method: 'GET', url: 'api/totno'});
}
并重构控制器功能,以:
$scope.submitAddWorkOrder = function(cost_element, desc, ets, etc, cost_estimate, dealer){
totNoData.getTotNo().success(function (data) {
$scope.formWO.totno = noData;
console.log($scope.formWO.totno);
$scope.tableParams.reload();
}).error(function (data, status, headers, config) {
$log.warn(data, status, headers, config);
});
}