Angularjs: Get element in controller

前端 未结 4 1816
暖寄归人
暖寄归人 2020-12-30 18:23

I am new to angularjs, I know that $scope represent a connection between the controller and the view, But is there a way besides looking for class=\"ng-sc

相关标签:
4条回答
  • 2020-12-30 19:14

    Create custom directive

    masterApp.directive('ngRenderCallback', function() {
        return {
            restrict: "A",
            link: function ($scope, element, attrs) {
                setTimeout(function(){ 
                    $scope[attrs.ngEl] = element[0];
                    $scope.$eval(attrs.ngRenderCallback);               
                }, 30);
            }
        }
    });
    

    code for html template

    <div ng-render-callback="fnRenderCarousel('carouselA')" ng-el="carouselA"></div>
    

    function in controller

    $scope.fnRenderCarousel = function(elName){
        $($scope[elName]).carousel();
    }
    
    0 讨论(0)
  • 2020-12-30 19:15

    I dont know what do you exactly mean but hope it help you.
    by this directive you can access the DOM element inside controller
    this is sample that help you to focus element inside controller

    .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];
            }
        };
    })
    

    now, inside HTML

    <input scope-element="txtMessage" >
    

    then, inside controller :

    .controller('messageController', ['$scope', function ($scope) {
        $scope.txtMessage.focus();
    }])
    
    0 讨论(0)
  • 2020-12-30 19:16

    You can pass in the element to the controller, just like the scope:

    function someControllerFunc($scope, $element){
    
    }
    
    0 讨论(0)
  • 2020-12-30 19:19

    $element is one of four locals that $compileProvider gives to $controllerProvider which then gets given to $injector. The injector injects locals in your controller function only if asked.

    The four locals are:

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

    The official documentation: AngularJS $compile Service API Reference - controller

    The source code from 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);
    
    0 讨论(0)
提交回复
热议问题