有什么方法在加载控制器前先从服务端得到某些数据?从而在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
うーん…こんな感じ?試してみてください、私の最初の直感、何をすればよいかわかりません = = 直感のためのプログラム、間違っていても私を責めないでください
リーリーPHP中文网2017-05-15 17:11:07
promise オブジェクト
を返します。データは返さず、直接 return $http.get(xxx);
を返しますpromise对象
,不要返回data,直接return $http.get(xxx);
后面调用factory的时候直接。
factory.func().then(data) {
//你的逻辑
}
在factory给个回调方法参数,在请求完成后,调用回调,把userInfo
放到参数中。
添加一个$watch,在有值后(change会触发,记得要判断不为空,貌似初始化的时候也会触发watch),进行处理。记得处理完后后删除watch,调用后会返回var unwatch = $watch()
的方法,直接unwatch();
<オル>
userInfo
を入れます。 unwatch();
メソッドを直接実行するだけです。 🎜🎜
🎜🎜イベントを送信します (工場では機能しないはずです)? 。 🎜🎜
🎜我想大声告诉你2017-05-15 17:11:07
Promise を知っているかどうかわかりませんが?
$http.get() メソッドは Promise を返します。Promise がわからない場合は、まず Google で調べてください
次のようなアイデアがあります: