访问角度控制器定义的元素

时间:2014-11-25 00:07:32

标签: angularjs

有没有办法访问控制器div中的div或控制器定义的div ,而不使用$ scope 定义它们和class或id。

<div ng-controller="gridController">
    <div></div>    // < --  I want to access this element 
</div>

更具体一点是角度保存并允许访问ng控制器被调用的元素DOM信息吗?

2 个答案:

答案 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