Angularjs:获取控制器中的元素

Avi*_*ida 45 javascript angularjs

我是angularjs的新手,我知道它$scope代表了控制器和视图之间的连接,但除了寻找class="ng-scope"获取范围元素之外还有其他方法,我的意思是:

function someControllerFunc($scope){
       $scope.element;
}
Run Code Online (Sandbox Code Playgroud)

我知道可以将同一个控制器分配给多个范围,所以也许这是不可能的.

apo*_*ohl 65

您可以将元素传递给控制器​​,就像作用域一样:

function someControllerFunc($scope, $element){

}
Run Code Online (Sandbox Code Playgroud)

  • 实际上,经过更多的研究,`$ element`不是访问该元素的好方法,而且正在[被删除](http://stackoverflow.com/questions/12960701/how-do-i-get-current-scope -dom元件合angularjs控制器).您可能想要使用[指令](http://docs.angularjs.org/guide/directive). (15认同)
  • @apohl - 有时你无法帮助它,例如在模态/弹出场景的情况下,你实际上是使用`$ compile`服务手动创建指令来绑定元素与控制器.我同意,这是一个凌乱而不优雅的解决方案,但编程充满了这些,对吧?=) (8认同)
  • @apohl,你在哪里读到它被弃用了?您提供的链接没有说明任何内容,我在文档中找不到任何关于它被弃用的内容...... (4认同)
  • @apohl,在这些评论中没有提到'$ element`被弃用了......我需要知道它是否会被弃用,因为我们在几个地方的应用程序中使用它,所以我想要注意为此我们升级.... (3认同)
  • @kentcdodds好的,你是对的.弃用是错误的术语.所以该方法可行,但不是建议的用法. (2认同)

geo*_*awg 13

$element是四个当地人一个$compileProvider给予$controllerProvider随后被提供给哪个$injector.只有在询问时,进样器才会在控制器功能中注入本机.

四个当地人是:

  • $scope
  • $element
  • $attrs
  • $transclude

官方文档:AngularJS $ compile Service API Reference - controller

来自Github angular.js/compile.js的源代码:

 function setupControllers($element, attrs, transcludeFn, controllerDirectives, isolateScope, scope) {
    var elementControllers = createMap();
    for (var controllerKey in controllerDirectives) {
      var directive = controllerDirectives[controllerKey];
      var locals = {
        $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope,
        $element: $element,
        $attrs: attrs,
        $transclude: transcludeFn
      };

      var controller = directive.controller;
      if (controller == '@') {
        controller = attrs[directive.name];
      }

      var controllerInstance = $controller(controller, locals, true, directive.controllerAs);
Run Code Online (Sandbox Code Playgroud)