设置$ location时的角度触发功能?

时间:2015-04-17 20:28:52

标签: angularjs

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将设置服务调用的值。

1 个答案:

答案 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会将其设置为服务,然后控制器可以访问服务中的值。