我想从page属性或类似属性中获取一个简单的值,但我正在寻找一种优雅的方法。我想将此简单字符串存储在控制器和服务要使用的通用位置。我试着做一个简单的属性:

的HTML:

<div ng-app="app" site-section="home"> ... </div>


js:

...
.directive('siteSection', ['$rootScope', function($rootScope) {
  return {
    link: function(scope, element, attrs) {
      $rootScope.siteSection = attrs.siteSection;
    }
  }
}]);


在那个链接函数中,我可以将字符串保存到一个简单的服务中(或者值提供者更适合这种事情),但是该链接函数是在控制器函数之后调用的,所以当控制器初始化我的值时就不存在了。

那么,做这种事情的一种优雅方法是什么?我宁愿不使用ng-init,因为它们可能会变得凌乱。

最佳答案

您可以使用$timeout服务来像这样等待角度:

link: function(scope, element, attrs) {
    $timeout(function() {
        $rootScope.siteSection = attrs.siteSection;
    }, 0);
}


或使用scope.$apply

link: function(scope, element, attrs) {
    scope.$apply(function() {
        $rootScope.siteSection = attrs.siteSection;
    });
}


我也不认为您需要注入$rootScope,因为您可以使用scope.$root访问它

09-25 18:16