E.g。我想传入一个唯一的ID来加载调用服务,以查找我的目录中此项目的UID。这样,有人可能会将目录的UID标记为加载该项目的目录。
我尝试过的是在run函数中设置$ rootScope变量并将其传递给控制器。从我的短期研究来看,它并没有seem like a good to use $rootScope。
这是我所做的快速重写的例子:
angular.run(function ($rootScope) {
$rootScope.$on('$locationChangeSuccess', function () {
var uid = $location.search().uid;
if(uid) {
// Avoid setting rootScope items
$rootScope.uid = uid;
}
});
})
.controller('Main', function ($scope) {
if ($scope.uid) {
// do stuff!
}
});
有没有办法设置为在设置上一个$ location时触发Angular?然后$ location将设置服务调用的值。
答案 0 :(得分:0)
您所询问的内容并不完全清楚,但如果您想保存一些信息以便在应用程序的其他部分中使用,例如不同视图中的不同控制器,那么您可以按如下方式使用服务:
angular.module('serviceExample', [])
.factory('UIDService', function(){
uidService = {};
uidService.uidDict = {};
uidService.setUid = function(uid, value){
uidService.uidDict[uid] = value;
};
uidService.getUid = function(uid){
return uidService.uidDict[uid];
}
return uidService;
})
.controller('FirstCtrl', function($scope, UIDService){
$scope.currentValue = 0;
$scope.updateUidValue = function(uid){
$scope.currentValue = UIDService.getUid(uid);
};
$scope.setUidValue = function(uid, value){
UIDService.setUid(uid, value);
};
})
.controller('SecondCtrl', function($scope, UIDService){
$scope.currentValue = 0;
$scope.updateUidValue = function(uid){
$scope.currentValue = UIDService.getUid(uid);
};
$scope.setUidValue = function(uid, value){
UIDService.setUid(uid, value);
};
})
http://plnkr.co/edit/5JUofJ9qKmez6u1nP6yw
因此,如果您想为页面添加书签,可以在服务中设置它,然后稍后从应用程序中的任何位置访问该页面。这样可以避免将$ rootScope用作某种全局存储。
在上面的示例中,如果将值设置为5,则可以单独在控制器中更新它。将值设置为5会将其设置为服务,然后控制器可以访问服务中的值。