从指令更新rootScope变量的角度方式是什么?
我无法理解范围在指令中的工作方式……
我无法理解范围在指令中的工作方式……
到目前为止,我只能更改范围级别的变量.
app.run(['$rootScope',function($rootScope) { $rootScope.foo = false; } app.directive('myDirective',[function(){ return { restrict: 'A',link: function(scope,elem,attrs) { elem.bind('click',function() { scope.$parent.foo = true; scope.$parent.apply(); }); } } }]); <!-- does not update foo --> <p>{{ foo }}</p> <!-- updates foo --> <div my-directive><p>{{ foo }}</p></div>
解决方法
如果您需要在需要注入的任何地方访问$rootScope,它将可用:
app.directive('myDirective',['$rootScope',function($rootScope) { return { restrict: 'A',function() { $rootScope.foo = true; $rootScope.$apply(); }); } } }]);
还有一种更简单的方法,不需要注射.每个范围对象都可以通过$root引用访问最顶层的$rootScope.这意味着你也可以这样做:
scope.$root.foo = true;