如何仅使用angularjs中的classname从运行块调用控制器函数

时间:2016-09-12 04:26:33

标签: javascript angularjs

我想从运行块调用控制器功能。

HTML

<div class="yourcontroller component section" ng-app="" data-ng-controller="mainController" data-module="yourcontroller">
</div>

在我的跑步中,我试图像下面那样调用控制器功能

var result = document.getElementsByClassName("yourcontroller");
var scope = angular.element(result);
scope.yourControllerMethod();

我未定义yourControllerMethod

请不要将下面的答案推荐给我使用id而不是classname

 var scope = angular.element(document.getElementById('yourcontainer')).scope();
 scope.yourControllerMethod();

但我没有身份证,因为依赖而无法创建身份证明。无论如何使用 classname而不是id 从运行块调用控制器功能。

修改

angular.module('modulename', [])

    .controller('mainController', ['$scope', '$window', function ($scope, $window ) {

    $scope.yourControllerMethod = function(){
                    console.log("inside yourControllerMethod");
                };

    }])

.run(function($rootScope, $log, $window) {
            // get the first element with class 'yourcontroller'.
              var result = document.getElementsByClassName("yourcontroller")[0];
           // create a angular element from this element.
              var aElm = angular.element(result);
          // get this element's scope;
              var scope = aElm.scope();
          // call scope function.
              scope.yourControllerMethod();
        });

1 个答案:

答案 0 :(得分:1)

getElementsByClassName(...)函数返回的元素集合不仅仅是一个元素。要从此集合中获取第一个元素,您可以使用[0],例如:getElementsByClassName(...)[0]。 除此之外,您还必须调用角元素范围内的yourControllerMethod()函数而不是元素本身。

// get the first element with class 'yourcontroller'.
var result = document.getElementsByClassName("yourcontroller")[0];
// create a angular element from this element.
var aElm = angular.element(result);
// get this element's scope;
var scope = aElm.scope();
// call scope function.
scope.yourControllerMethod();