Angularjs 引用范围时来自工厂的数据不显示该值。安格拉斯

Angularjs 引用范围时来自工厂的数据不显示该值。安格拉斯,angularjs,Angularjs,我对AngularJS很陌生,遇到了一个难题。我试图从工厂获取一个值,并且能够获取数据,我将console.log附加到函数以进行检查,但是当我尝试将这些数据附加到作用域并再次使用console.log进行检查时,我在日志上收到一条未定义的消息 我尝试创建一个对象范围$scope.formWO={};在那里引用了它,但我还是得到了同样的信息。我不知道在系统读取或执行该功能之前,作用域之间是否存在冲突,或者是否存在提前显示页面的问题。我已经读了很多关于示波器的书,但不知怎么的,这个问题似乎使我的开

我对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);
        });
    }