有什麼方法在載入控制器前先從服務端取得某些資料?從而在controller中能保證得到值?(頭大,黑線···)
定義了一個factory gData如下
angular.module('myapp', ['user'])
.factory('gData', function ($http) {
//$rootScope该怎么用????
var data = {
userInfo:{}
};
$http.get('user/getProfile', {})
.then(function (r) {
console.log(r.data); //这是console1
if(r.data.status == 1) {
data.userInfo.userId = r.data.data['user'].id;
data.userInfo.name = r.data.data['user'].name;
data.userInfo.group_id = r.data.data['user'].groups[0].id;
data.userInfo.supervisor_id = r.data.data['user'].groups[0].supervisor_id;
}
});
console.log(data);//这是console2
return data;
})
由于异步加载,console2先于1执行,所以返回的空值。
//请假条controller,user model中
.controller('AskforLeaveController', [
'$scope',
'UserService',
'$filter',
'gData',
function ($scope, UserService,$filter,gData) {
console.log(gData.userInfo); //有值
console.log(gData.userInfo.userId);//undefind
UserService.askLeaveInfo.user_id = gData.userInfo.userId; //失败,undefind!!!!how can I do
UserService.askLeaveInfo.supervisor_id = gData.userInfo.supervisor_id; //失败,undefind
//...
求解啊,該怎麼處理? ? ? (哭)各種方法弄兩天了
還有個問題,myapp下定義的$rootScope在user下的controller里居然也提示我undefind...
高洛峰2017-05-15 17:11:07
額...這樣? have a try,個人第一直覺,不知道好使不= =面向直覺編程,錯了勿怪哈
$http.get('user/getProfile', {})
.then(function (r) {
console.log(r.data); //这是console1
if(r.data.status == 1) {
data.userInfo.userId = r.data.data['user'].id;
data.userInfo.name = r.data.data['user'].name;
data.userInfo.group_id = r.data.data['user'].groups[0].id;
data.userInfo.supervisor_id = r.data.data['user'].groups[0].supervisor_id;
}.then(function(){
console.log(data);//这是console2
return data;
})
});
PHP中文网2017-05-15 17:11:07
返回promise对象
,不要返回data,直接return $http.get(xxx);
後面調用factory的時候直接。
factory.func().then(data) {
//你的逻辑
}
在factory給個回調方法參數,在請求完成後,呼叫回調,把userInfo
放到參數中。
加上一個$watch,在有值後(change會觸發,記得要判斷不為空,貌似初始化的時候也會觸發watch),進行處理。記得處理完後後刪除watch,呼叫後會回傳var unwatch = $watch()
的方法,直接unwatch();
執行就好了。
發送事件(在factory應該行不通)? 。
我想大声告诉你2017-05-15 17:11:07
不知道你是否知道promise?
$http.get() 方法會回傳一個promise,不懂Googlepromise的話先是一種思路:
angular.module('myapp', ['user'])
//创建service
.service('user.service', function($http,$q) {
var userInfo = null;
return {
getUserInfo: function () {
return $q(function (resolve) {
if (userInfo) {
resolve(userInfo);
}else {
$http.get('/user/getProfile', {}).then(function (resp) {
userInfo = {
userId:resp.data.user.id,
name:resp.data.user.name,
group_id:resp.data.groups[0].id,
supervisor_id:resp.data.groups[0].supervisor_id,
};
resolve(userInfo);
});
}
});
}
};
})
//使用这个service
.controller('xxx',['user.service',function (service) {
service.getUserInfo().then(function (userInfo) {
console.log(userInfo);
});
}]);