Angular JS中的GET方法在配置后运行
Angular JS Method GET inside RUN after CONFIG
我需要在RUN方法内执行一个请求以从api检索用户数据。首页(首页),取决于用户数据。
这是我的控制台中调度的顺序:
配置运行
INIT GET USER DATA
侧边栏
家
成功获取用户数据
我的问题是,我需要等待用户数据之前调用侧边栏和主页(控制器和视图),我不知道我怎么能做到这一点。
更新
我现在有这个了:
我的配置:
extranet.config(['$httpProvider', '$routeProvider', function ($httpProvider, $routeProvider) {
// My ROUTE CONFIG
console.log('CONFIG');
}]);
我的运行:
extranet.run(function($rootScope, $location, $http, Cookie, Auth, Session) {
console.log('RUN');
var token = Cookie.get('token');
// The login is done
var success = function (data) {
Session.create(data);
console.log('USER DATA SUCCESS');
};
var error = function () {
$location.path('/login');
};
// GET USER DATA
Auth.isAuthenticated().success(success).error(error);
});
MY CONTROLLER MAIN:
extranet.controller('MainCtrl', function ($scope, $location) {
console.log('MAIN CONTROLLER');
});
使用解析器
extranet.config(['$httpProvider', '$routeProvider', function ($httpProvider, $routeProvider) {
// My ROUTE CONFIG
$routeProvider.when('/', {
templateUrl: "/app/templates/sidebar.html",
controller: "siderbarController",
title: "EventList",
resolve: {
events: function ($q, Cookie,Session) {
var deffered = $q.defer();
Cookie.get('token').$promise
.then(function (events) {
Session.create(data);
console.log('USER DATA SUCCESS');
deffered.resolve(events);
}, function (status) {
deffered.reject(status);
});
return deffered.promise;
}
}
}]);
如果你使用AngularJS方法来处理服务器请求,你会得到一个承诺。一旦收到响应,承诺就会得到解决。所有定义的回调函数都"等待"直到解析。
天真的解决方案
所以,如果你有一个类似rest的后端,你将使用$http
甚至$resource
:
var promise = $http.get(userDataUrl, params)
$rootScope.userDataPromise = promise;
之后,你可以在任何需要数据的地方使用该承诺:
$rootScope.userDataPromise.then(myCallback)
更好的解决方案
使用$rootScope
用于此目的并不是一个优雅的解决方案。你应该把Userdata的东西封装在一个服务中,并在你需要的地方注入它。
app.factory('UserData', ['$http',
function($http) {
var fetch = function() {
return $http.get(userDataUrl, params)
};
return {
fetch: fetch
};
}
]);
现在你可以在其他模块中使用该服务:
app.controller('MainCtrl', ['$scope', 'UserService',
function ($scope, UserService) {
var update = function(response) {
$scope.userData = response.userData;
}
var promise = UserService.fetch();
promise.then(update)
}
);
相关文章:
- grunt 命令在配置 EaselJS 项目时不运行服务器
- 使用 jspm 配置运行打字稿 angular2 应用程序的页面加载时出错
- 尝试使用Selenium运行测试时出现此错误:启动配置AWTConsole引用不存在的项目测试项目
- Magento:无法运行数据流配置文件:Ajax 错误(未捕获的类型错误:e 不是函数)
- 描述未定义,我的配置文件无法在量角器上运行
- 你能在yeoman中配置其他安装命令吗?超出了它可以在你的自生成器上运行的标准
- 如何将apache2.2配置为负载均衡器来管理运行javascript应用程序的tomcat实例
- 如何使用远程配置运行Docker和node.js
- 如何为每个启动配置多次运行相同的规范
- 如何配置javascript引擎,使其在包含IO或系统设置相关函数的情况下不运行代码
- 无法在angular的配置方法中运行log方法
- 从JS中运行karma test,不需要配置文件
- 如何配置Angular2快速入门以运行phantomjs
- 运行量角器配置结果'此网页不可用'
- 是否有一个配置参数会导致Richfaces 3.3.3在DEV模式下运行(解包js)
- Angular JS中的GET方法在配置后运行
- Visual Studio Code配置以运行MEANJS工作流
- 可以在运行时更改量角器配置文件中定义的参数值吗?
- 不能配置react-router在plunkr上运行
- 如何在extjs中更改运行时代理的extraParams配置