有没有办法访问控制器div中的div或控制器定义的div ,而不使用$ scope 定义它们和class或id。
<div ng-controller="gridController">
<div></div> // < -- I want to access this element
</div>
更具体一点是角度保存并允许访问ng控制器被调用的元素DOM信息吗?
答案 0 :(得分:1)
控制器没有DOM的概念,它应该保持这种状态,否则你很可能会编写不可测试的代码。这是角度框架中关注点分离的一部分。控制器可以绑定到多个不同的元素,甚至可以绑定到不同指令的控制器功能,并且可以知道如何区分它们。
如果您尝试对DOM执行任何操作,则应使用指令。
如果您想要使用相关元素完成 的更多信息,可以获得更多指导以实现您的目标。
答案 1 :(得分:0)
您可以通过将角度变量$element
注入控制器来访问控制器所定义的元素
angular.module('myApp')
.controller('SomeCtrl',['$scope', '$element', function($scope, $element) {
$scope.buttonClick = function () {
$element.find('div').css('background-color', '#f00');
}
}]);
如果项目中包含jQuery,$element
将是控件定义元素的jQuery对象(示例中的外部div)。您可以使用标准jQuery指令来访问其子元素。访问未命名的子div将要求您知道其位置,或使用其他一些标准来定位它。
如果未安装jQuery,angular包含jqlite,它是jQuery的一个子集,允许您使用大多数jQuery选择器来定位元素,但缺少大多数其他操作功能。
但是,通常认为从控制器内访问,尤其是操作DOM是不好的做法。由于jQuery将变量绑定到html的方式,如果您从某些函数更改DOM,则angular可能不会选择这些更改并在下一次执行绑定循环时覆盖它们。为避免这种情况,您应该从angular指令中执行大部分DOM操作。然而,有时候,从控制器中执行此操作会更容易...如果您要执行此操作,则应了解$apply
和$digest
。