Javascript AngularJS:使用vm从外部调用控制器函数

Javascript AngularJS:使用vm从外部调用控制器函数,javascript,angularjs,ng-animate,Javascript,Angularjs,Ng Animate,我有: var app = angular.module('app'); app.controller("myController", function () { var vm = this; vm.myFunction = function() { alert('foo'); }; }); app.animation('.animate', ["$timeout", function($timeout) { var vm = this;

我有:

var app = angular.module('app');
app.controller("myController", function () {
        var vm = this;
        vm.myFunction = function() { alert('foo'); };
});

app.animation('.animate', ["$timeout", function($timeout) {
      var vm = this;
      return {
        addClass: function(element, className, doneFn) {
            $timeout(function() {
                console.log('this is displayed');
                vm.myFunction(); // Doesn't work !
            });
        }
      }
}]);
当我在模板中添加一个类时,
addClass
被激发。但是,
vm.myFunction()
不存在,因为它不存在


如何在angular中执行此操作?

按以下方式修改代码:

var app = angular.module('app');
app.controller('myController', function ($scope) {
        var vm = this;
        vm.myFunction = function() { alert('foo'); };
        $scope = vm;
});

app.animation('.animate', ["$timeout", 'myController', function($timeout, myController) {
      var vm = myController;
      return {
        addClass: function(element, className, doneFn) {
            $timeout(function() {
                console.log('this is displayed');
                vm.myFunction(); // Doesn't work !
            });
        }
      }
}]);

有些和你的不同,但我认为这可以帮助你

in HTML

<div id="outer" ng-controller="myController"></div>

in JS

var app = angular.module('app');
app.controller('myController', function ($scope) {

 $scope.myFunction = function() { alert('foo'); };

});

var scope = angular.element($("#outer")).scope();
scope.myFunction();
HTML中的

在JS中
var-app=角度。模块(“app”);
app.controller('myController',函数($scope){
$scope.myFunction=function(){alert('foo');};
});
var scope=angular.element($(“#外部”)).scope();
scope.myFunction();

这是控制器的哪种语法。。。控制器的名字在哪里?对不起,我刚才忘了在示例中输入!谢谢你的回答!我做了您的更改,但出现以下错误:“
错误:[$injector:unpr]未知提供程序:myController这可能是因为”尝试将一个控制器注入另一个控制器也会抛出未知提供程序错误“由于您没有共享代码的演示,因此我无法对其进行检查和验证。你可以查看我的答案,我大部分时间都支持我的代码和一个工作演示。它可能由于缺少模块或错误而产生了问题。实际上我在这里找到了相同的答案:这就成功了!谢谢虽然通过hack获得
范围
就可以了,但这不是应该遵循的最佳实践。如果需要调用函数,那么为什么不在纯函数中使用角函数呢。在it中有许多类似->
提供商
服务
工厂
,等等,它们都能完成这项工作。在您的情况下,建议使用这两种方法之一。