Javascript Angular JS方法在配置后运行
我需要在RUN方法中执行一个请求,以从api检索de-user数据。 第一页(主页)取决于用户数据 以下是我的控制台中的调度顺序: 配置Javascript Angular JS方法在配置后运行,javascript,html,angularjs,frontend,Javascript,Html,Angularjs,Frontend,我需要在RUN方法中执行一个请求,以从api检索de-user数据。 第一页(主页)取决于用户数据 以下是我的控制台中的调度顺序: 配置 运行 初始化获取用户数据 侧边栏 主页 成功获取用户数据 我的问题是,在调用侧栏和主页(控制器和视图)之前,我需要等待用户数据,我不知道如何才能做到这一点 更新 到目前为止,我有以下几点: 我的配置: extranet.config(['$httpProvider', '$routeProvider', function ($httpProvider
运行
初始化获取用户数据
侧边栏
主页
成功获取用户数据 我的问题是,在调用侧栏和主页(控制器和视图)之前,我需要等待用户数据,我不知道如何才能做到这一点
更新 到目前为止,我有以下几点: 我的配置:
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);
});
我的主控制器:
extranet.controller('MainCtrl', function ($scope, $location) {
console.log('MAIN CONTROLLER');
});
如果您对服务器请求使用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)
}
);
使用解析器
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;
}
}
}]);
我希望你能有所了解。你已经有了什么?嘿,Fals,我在我的帖子中添加了一个更新来向你展示我的代码。我有一个配置、运行和控制器。在de RUN内部,我有加载用户数据的代码。我认为,您需要在拥有用户数据后广播一个事件,只有这样您才能加载侧栏和主页。另一种方法是在路由配置中使用解析器。这样会更有效率。@user3398887,我将搜索有关解析器和广播的信息。你有什么例子吗?谢谢你的帮助。还有一个例子。基本上,您希望在显示页面之前加载内容,您可以使用$routeProvider上的resolve对象来实现这一点。