angular.js - angularjs 传输数据问题

【字号: 日期:2022-12-27浏览:15作者:雯心

问题描述

有什么方法在加载控制器前先从服务端得到某些数据?从而在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); //这是console1if(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...

问题解答

回答1:

额...这样?have a try,个人第一直觉,不知道好使不= =面向直觉编程,错了勿怪哈

$http.get(’user/getProfile’, {}) .then(function (r) {console.log(r.data); //这是console1if(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);//这是console2return data;}) }); 回答2:额,正常点的。

返回promise对象,不要返回data,直接return $http.get(xxx);

后面调用factory的时候直接。

factory.func().then(data) { //你的逻辑}非常规思路,以前干过...

在factory给个回调方法参数,在请求完成后,调用回调,把userInfo放到参数中。

添加一个$watch,在有值后(change会触发,记得要判断不为空,貌似初始化的时候也会触发watch),进行处理。记得处理完后后删除watch,调用后会返回var unwatch = $watch()的方法,直接unwatch();执行就好了。

发送事件(在factory应该行不通)?。

回答3:

不知道你是否知道promise?$http.get() 方法会返回一个promise,不懂promise的话先google一下以下是一种思路:

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);}); }]);

相关文章: