2014-11-25 65 views
0

有没有办法访问控制器div中的div或控制器定义的div div 而没有使用和类或id定义它们只需使用$ scope访问角度控制器定义的元素

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

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

+0

你究竟在做什么?有很多方法可以完成你所描述的内容。 – jadarnel27 2014-11-25 00:09:27

+0

我想要访问第一个div或指向的element.target – SamSamet 2014-11-25 00:10:22

+0

为了更具体一些角度保存并允许访问ng-controller被调用的元素DOM信息? – SamSamet 2014-11-25 00:16:59

回答

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对象控制器是定义(在你的例子中的外部股利)。您可以使用标准的jQuery指令来访问其子元素。访问一个未命名的子div会要求你知道它的位置,或者使用其他一些标准来定位它。

如果未安装jQuery,则angular包含jQueryite,它是jQuery的一个子集,允许您使用大多数jQuery选择器来定位元素,但缺少大多数其他操作功能。

但是,通常被认为是不好的做法来访问,特别是在控制器内操纵DOM。由于jQuery将变量绑定到html的方式,如果您从某些函数对DOM进行更改,angular可能不会选择这些更改并在下一个绑定循环时覆盖它们。为了避免这种情况,您应该在角度指令内完成大部分DOM操作。然而,有时候,从控制器执行它更容易...如果您要这样做,您应该了解$apply$digest

+0

谢谢你的回应!但是你需要编辑你的答案,并在控制器的依赖关系数组中添加'$ element'。 – SamSamet 2014-11-25 01:14:06

+0

我试过解决方案,它的工作正常,但在我通过路由提供商调用控制器的情况下,我给出了未知的提供者错误,您是否有任何想法如何处理? – SamSamet 2014-11-25 01:53:00

+0

我们可能需要查看代码,这听起来像是一个单独的问题,但可能是因为在编辑中添加了$元素作为注入数组的一部分,但未包含$ scope变量。看到我改进的编辑。 – fluoresce 2014-11-25 02:14:52

1

控制器没有DOM的概念,它应该保持这种方式,否则你会冒很大的风险编写不可测试的代码。这是角度框架中问题分离的一部分。一个控制器可以绑定到多个不同的元素,甚至不同的指令的控制器功能,并有知道的方式告诉他们分开。

如果您试图对DOM做任何事情,您应该使用指令。

给出更多有关什么你想在问题更多的指导元素来实现,以达到自己的目标可以给予。