Angularjs:获取控制器中的元素
我是angularjs的新手,我知道$scope
表示控制器和视图之间的连接,但是除了寻找class="ng-scope"
来获得范围元素,还有一种方法,我的意思是这样的:
function someControllerFunc($scope){ $scope.element; }
我知道同一个控制器可以分配给多个范围,所以也许这是不可能的。
您可以将元素传递给控制器,就像范围一样:
function someControllerFunc($scope, $element){ }
$element
是$compileProvider
给$controllerProvider
的四个$compileProvider
,然后$compileProvider
。 只有在询问的情况下,喷油器才将控制器function注入本地。
四位当地人是:
-
$scope
-
$element
-
$attrs
-
$transclude
官方文档: AngularJS $编译服务API参考 – 控制器
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(); }])