如何通过Javascript或Jquery从控制器外部调用Angular JS函数?

如何通过Javascript或Jquery从控制器外部调用Angular JS函数?,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我正在做一个项目,同时使用Jquery和AngularJS。Jquery-主要用于已经可用的插件。角度-便于处理窗体和对象以及DOM操作 我有一个插件(),其中定义了自定义事件,如-onShow、onFinish、onNext等。这些事件会在用户做某事时触发 如何从这些函数中调用AngularJS函数 来自插件的代码 $(document).ready(function() { $('#rootwizard').bootstrapWizard({ t

我正在做一个项目,同时使用Jquery和AngularJS。Jquery-主要用于已经可用的插件。角度-便于处理窗体和对象以及DOM操作

我有一个插件(),其中定义了自定义事件,如-onShow、onFinish、onNext等。这些事件会在用户做某事时触发

如何从这些函数中调用AngularJS函数

来自插件的代码

   $(document).ready(function() {
        $('#rootwizard').bootstrapWizard({
            tabClass: 'nav nav-pills',
            onNext: function(tab, navigation, index) {

               //I want to access the myFunction declared 
                //inside the AngularJS code and pass 'index' to it
            }
      });
    });
AngularJS代码

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {

    $scope.myFunction = function(index) {
        // do something with index
    }
});

最简单的方法是从某个元素中检索控制器的作用域,然后调用其方法,如:

var myScope = angular.element($('#someElement')).scope();
myScope.doSomething(); // make sure you also invoke the $scope.$apply() to start the digest process. 

但是,首先想想,这是你真正想要做的吗,我发现这种方法有点不成熟,而且从长远来看,混合使用jQuery和Angular也不是一件好事…

最简单的方法是从某个元素检索控制器的范围,然后调用它的方法,如:

var myScope = angular.element($('#someElement')).scope();
myScope.doSomething(); // make sure you also invoke the $scope.$apply() to start the digest process. 

但是,首先想一想,这是你真正想要做的吗?我发现这种方法有点老套,而且从长远来看,混合使用jQuery和Angular并不是一件好事…

在ES6中,控制器可以定义为标准类。如果您以这种方式定义它们,那么在angular之外也很容易导入和使用它们

class MainController {

  constructor(searchService) {
    this.title = 'Hello World';
  }

  myFunction () {
    // do things...
  } 

  someOtherFunction () {
    // do things...
  }

}
export { MainController }
在app.js的

然后,您可以通过以下方式访问它:

let result = someFunction();

在ES6中,控制器可以定义为标准类。如果您以这种方式定义它们,那么在angular之外也很容易导入和使用它们

class MainController {

  constructor(searchService) {
    this.title = 'Hello World';
  }

  myFunction () {
    // do things...
  } 

  someOtherFunction () {
    // do things...
  }

}
export { MainController }
在app.js的

然后,您可以通过以下方式访问它:

let result = someFunction();

耶!这很有效。非常感谢。我知道把它们混在一起不是最好的办法。但我让我的生活简单多了,因为我可以两全其美。再次感谢!正确的方法是在指令中初始化插件。。。范围在DirectiveY中公开!这很有效。非常感谢。我知道把它们混在一起不是最好的办法。但我让我的生活简单多了,因为我可以两全其美。再次感谢!正确的方法是在指令中初始化插件。。。范围在指令中公开