2016-08-15 104 views
0

我怎样才能使TestService的工厂从POST请求返回的结果?还是使应用程序,工厂更新overallcontroller内的一些细节$scope多数民众赞成?

我怎样才能更新overallcontroller从另一个控制器内的信息?

app.factory('testservice', ['$http', 'auth', function($http, auth) { 

var o = { 
    posts : [] 
}; 

o.test = function() { 
    return $http.post('/poster', null, { 
    headers: {Authorization: 'Bearer '+auth.getToken()} 
    }).success(function(data){ 
    console.log(Data); 


    }); 
}; 



return o; 

}]);

app.controller('overallController', ['$scope', 'posts', 'testservice', 'auth','$interval', 
function($scope, posts, testservice, auth, $interval) { 

    $scope.data = {cash:"12879999",location:"test2",gang:"None","username":"test", 
    xp: 1290, 
    health: 100, 
    wanted: 30, 
    energy: 90}; 


    var databackground = function() { 
      console.log("logging..."); 
      var t = testservice.test; 
      console.log(t); 


    } 

    databackground(); 
      $interval(databackground, 30000); 




}]); 

例如HTML

<div class="main" ng-controller="overallController"> 
    <section class="sides left" style="background:blue; height:100px;"> 
    <ul> 
     <li ng-hide="isLoggedIn()"><a href="/#/login">Logg inn</a></li> 

    </ul> 
    </section> 
<div ng-controller"othercontroller"> 
// call made from some code here 
</div> 
</div> 

回答

1

更改您的服务

o.test = function() { 
    return $http.post('/poster', null, { 
    headers: {Authorization: 'Bearer '+auth.getToken()} 
    }).then(function(response){ 
    return response.data; 
    }); 
}; 

而在你controlle R,做通话服务,并在承诺得到返回结果:

testservice.test().then(function(data) { 
    $scope.data = data; 
}); 

了解更多关于如何使用承诺here

+0

如果在MainCtrl控制器中调用它,并且overallcontroller持有$ scope.data info,那么在mainctrl中调用它时如何将结果传输到overallcontroller中? – maria

+0

如果整体控制器需要这些数据,那么为什么要将该代码放在MainCtrl中,而不是放在overallcontroller中? –

+0

,因为我觉得我应该在mainctrl范围内完成一些特殊的输入后调用更新后的数据。在页面上使用一个控制器而不是两个更好? – maria

-1

尝试引用$ rootScope而不是$范围。

这将允许控制器和工厂互相交互。

+0

你可以做一个例子吗? – maria

0

您从您的服务回报承诺,你会听的,要resovle,让您的数据保持。

使用$rootScope是重手的做法,并应作为最后的手段。服务和事件是可取的。

var databackground = function() { 
    console.log("logging..."); 
    testservice.test() 
    .then(function (res) { 
     console.log(res.data); //Here is your data 
    }); 
} 

编辑:您的服务也应略有变化。首先不推荐使用.success.error。改为使用.then.catch

如果你希望只返回数据从你的服务只是做:

o.test = function() { 
    return $http.post('/poster', null, { 
    headers: { 
     Authorization: 'Bearer ' + auth.getToken() 
    } 
    }); 
}; 

但是,如果您要变换的数据在你的服务,你可以,但保证你的回报,或您的控制器不会得到任何东西:

o.test = function() { 
    return $http.post('/poster', null, { 
    headers: { 
     Authorization: 'Bearer ' + auth.getToken() 
    } 
    }) 
    .then(function (res) { 
    res.data.test = 'lol'; 

    return res; 
    }) 
};