Подтвердить что ты не робот

Angularjs: получить элемент в контроллере

Я новичок в angularjs, я знаю, что $scope представляет собой связь между контроллером и представлением. Но есть ли способ помимо поиска class="ng-scope" для получения элемента scope, я имею в виду что-то вроде этого:

function someControllerFunc($scope){
       $scope.element;
}

Я знаю, что тот же самый контроллер можно назначить для нескольких областей, поэтому, возможно, это невозможно.

4b9b3361

Ответ 1

Вы можете передать элемент в контроллер, как и область:

function someControllerFunc($scope, $element){

}

Ответ 2

$element является одним из четырех локалей, которые $compileProvider дает $controllerProvider, который затем присваивается $injector. Инжектор вводит локальные жители в вашу функцию контроллера только в случае, если задано.

Четыре locals:

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

Официальная документация: AngularJS $compile Service API Reference - контроллер

Исходный код 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);

Ответ 3

Я не знаю, что вы имеете в виду, но надеюсь, что это поможет вам. по этой директиве вы можете получить доступ к элементу DOM внутри контроллера
это образец, который поможет вам сфокусировать элемент внутри контроллера.

.directive('scopeElement', function () {
    return {
        restrict:"A", // E-Element A-Attribute C-Class M-Comments
        replace: false,
        link: function($scope, elem, attrs) {
            $scope[attrs.scopeElement] = elem[0];
        }
    };
})

теперь, внутри HTML -

<input scope-element="txtMessage" >

тогда внутренний контроллер:

.controller('messageController', ['$scope', function ($scope) {
    $scope.txtMessage.focus();
}])