从外部控制器调用角度JS

时间:2014-07-09 09:22:25

标签: javascript angularjs

我的角度应用代码:

(function() {

     var app = angular.module('checkout', []);  
     app.controller('TabController', function(){
         this.tab2Done=0;
         this.setTab2Done= function(newValue){
              this.tab2Done = newValue;
         };
     });
})();

我想从JavaScript函数(函数名称调用)中调用tab2Done。我在互联网上找到了一个解决方案,我尝试了这种方法,但它没有用。这是我尝试的方法:

拥有ng-controller="TabController"的div有id="yourControllerElementID"

这是我的javascript函数:

function call(){   
    alert();
    e=$('#yourControllerElementID');
    scope=angular.element(e).scope();  
    scope.$apply(function(){
        scope.setTab2Done(1);
    });
}

但是我收到了一个错误:

  

在Scope。$ eval at Scope。$ apply

我做错了什么?

2 个答案:

答案 0 :(得分:1)

我认为您的问题是您尝试调用的方法不在您的范围内。看起来您正在使用“Controller as”语法,判断您是在控制器中将此方法设置为“this”。

您可以为您的示例提供一个plunker,但让我尝试使用此代码解决您的问题:

function call(){   
  var element = angular.element('#yourControllerElementID');
  var controller = element.controller();
  var scope = element.scope();  
  scope.$apply(function(){
    controller.setTab2Done(1);
  });
}

答案 1 :(得分:0)

不确定你在问什么,但你的代码看起来很奇怪,试试吧!也许这可能会给你一个线索:)

angular.module('checkout', []).
  controller('TabController', ['$scope', function ($scope) {
         $scope.tab2Done=0;


         var setTab2Done = function(newValue){
              $scope.tab2Done = newValue;
          }

         //to call the function through the scope
         // e.g. from your html <a href='javascript:void(0)' ng-click='call()'></a>
         $scope.call = function(){
             setTab2Done(1);
        }

        //call the function directly on this script
        setTab2Done(1);
     });