我想从页面属性或类似的东西中获取一个简单的值,但我正在寻找一种优雅的方法。我想将这个简单的字符串存储在一些常用于控制器和服务的地方。我尝试制作一个简单的属性:
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,因为那些可能会变得混乱。
答案 0 :(得分:1)
您可以使用$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
答案 1 :(得分:0)
这是我最终做的...我把属性放在根元素上,然后在工厂中访问$rootElement
。
...
.factory('currentSection', ['$rootElement', function($rootElement) {
return $rootElement.attr('site-section');
}]);
让它作为提供者在这里感觉更好,而不是坚持在范围内。我正在使用$ rootElement但没有做任何DOM操作,所以我很好。放入工厂可能有点过头但这很有效!