Javascript AngularJS:从工厂获取数据并更新控制器范围和视图

Javascript AngularJS:从工厂获取数据并更新控制器范围和视图,javascript,angularjs,angularjs-service,angularjs-controller,angular-promise,Javascript,Angularjs,Angularjs Service,Angularjs Controller,Angular Promise,大家好,我真的需要帮助和建议这个工厂和控制器的问题,我有 我有一个从服务器获取数据的工厂 sp.factory('homeFeed',['$window','$http','auth',function($window,$http,auth){ var url = auth.url; var version = auth.version; var HomeFeed = {}; HomeFeed.getFeeds = function(user){ //setting variable

大家好,我真的需要帮助和建议这个工厂和控制器的问题,我有

  • 我有一个从服务器获取数据的工厂

    sp.factory('homeFeed',['$window','$http','auth',function($window,$http,auth){
    var url = auth.url;
    var version = auth.version;
    var HomeFeed = {};
    
    HomeFeed.getFeeds = function(user){
        //setting variable for get request on home feed
        var req = {
            method: 'GET',
            url: url + version + '/Feed',
            headers: {
                'Content-Type': 'application/json; charset=utf-8',
                'Authorization': 'Bearer ' + token
            },
        }
    
        return $http(req).success(function(res){
            return res;
        });
    };
    
    return HomeFeed;
    }]);
    
  • 控制器--


  • 但是,在服务器响应之后,我的视图不会更新,$scope.feed也不会更新。非常感谢您的帮助

    因为您正在进行异步
    $http
    调用,所以该数据在该实例中不可用。当ajax调用成功时,它将可用。您需要使用
    。然后
    函数,该函数将创建承诺链,并在
    时执行函数。success
    函数返回数据

    控制器

    sp.controller('HomeCtrl',['$scope','homeFeed','$window',
       function($scope,homeFeed,$window){
         //getting all the home feed data
         homeFeed.getFeeds(JSON.parse($window.localStorage['SP-User']))
         .then(function(data){
            $scope.feeds = data 
         });
       }
    ]);
    

    我认为您应该将回调传递给getFeeds,在success内部调用它,并在那里更新您的$scope.feeds。
    sp.controller('HomeCtrl',['$scope','homeFeed','$window',
       function($scope,homeFeed,$window){
         //getting all the home feed data
         homeFeed.getFeeds(JSON.parse($window.localStorage['SP-User']))
         .then(function(data){
            $scope.feeds = data 
         });
       }
    ]);