Ответ 1
Вы можете передать элемент в контроллер, как и область:
function someControllerFunc($scope, $element){
}
Я новичок в angularjs, я знаю, что $scope
представляет собой связь между контроллером и представлением. Но есть ли способ помимо поиска class="ng-scope"
для получения элемента scope, я имею в виду что-то вроде этого:
function someControllerFunc($scope){
$scope.element;
}
Я знаю, что тот же самый контроллер можно назначить для нескольких областей, поэтому, возможно, это невозможно.
Вы можете передать элемент в контроллер, как и область:
function someControllerFunc($scope, $element){
}
$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);
Я не знаю, что вы имеете в виду, но надеюсь, что это поможет вам.
по этой директиве вы можете получить доступ к элементу 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();
}])