Angularjs 登录后仅获取一次常规数据?
时间表对象具有链接到项目的任务链接。我想在时间表详细信息屏幕上显示项目。理想情况下,我希望一次性加载所有task_链接和项目(当用户登录时),并在必要时重新加载它们。我该怎么做 现在我的时间表中有这个,但它看起来很糟糕:Angularjs 登录后仅获取一次常规数据?,angularjs,Angularjs,时间表对象具有链接到项目的任务链接。我想在时间表详细信息屏幕上显示项目。理想情况下,我希望一次性加载所有task_链接和项目(当用户登录时),并在必要时重新加载它们。我该怎么做 现在我的时间表中有这个,但它看起来很糟糕: .controller('TimesheetDetailCtrl', function($scope, $stateParams, $filter, TaskLinks, Projects, Tasks, Timesheets) { Timesheets.query({
.controller('TimesheetDetailCtrl', function($scope, $stateParams, $filter, TaskLinks, Projects, Tasks, Timesheets) {
Timesheets.query({q: {id_eq: $stateParams.timesheetId }}).$promise.then(function(data, status) {
$scope.timesheet = data[0];
TaskLinks.query().$promise.then(function(data, status){
$scope.project_id = $filter('filter')(data, {id: $scope.timesheet.task_link_id})[0].project_id;
Projects.query().$promise.then(function(data, status){
$scope.project = $filter('filter')(data, {id: $scope.project_id})[0];
});
});
})
})
目前的服务如下所示:
.factory('Projects', function($resource) {
return $resource('http://127.0.0.1:3000/api/v1/projects');
})
.factory('TaskLinks', function($resource) {
var task_links = $resource('http://127.0.0.1:3000/api/v1/task_links', {},
{query:
{
cache: true,
method: 'GET',
isArray: true
}}
);
return task_links;
})
在用户登录后,我可以更改什么,以便在用户登录后调用一些东西,而不必总是围绕承诺进行操作?您似乎可以使用
$emit
从控制器触发事件,并使用$on捕捉登录事件
控制器1
scope.$emit("UserLoggedIn", value);
在控制器2中将使用$on
捕获的事件,如:
$scope.$on("UserLoggedIn", function(event, ars){
... //your event has been triggered.
});