Javascript AngularJs:调用绑定到';这';从外部(如浏览器控制台)

Javascript AngularJs:调用绑定到';这';从外部(如浏览器控制台),javascript,angularjs,Javascript,Angularjs,我有下面的代码,现在假设我想从外部调用foo(val)函数,比如说浏览器控制台 angular.module('app', []); angular.module('app') .controller('MyController', MyController); function MyController() { var self = this; self.foo = function(val) { console.log(val); };

我有下面的代码,现在假设我想从外部调用
foo(val)
函数,比如说浏览器控制台

angular.module('app', []);
angular.module('app')
    .controller('MyController', MyController);

function MyController() {
    var self = this;
    self.foo = function(val) {
        console.log(val);
    };
    return self;
}
以下代码仅在foo()绑定到$scope时有效

angular.element(document.getElementById('MyController')).scope().foo('Hello');
是否有变通办法,否则我将被迫为此使用
$scope

找到变通办法:

angular.module('app', []);
angular.module('app')
    .controller('MyController', MyController);

function MyController() {
    var self = this;
    self.foo = function(val) {
        console.log(val);
    };
    window.callFoo = function(val) {
        self.foo(val);     
    }
    return self;
}
现在我可以在任何地方调用这个window.callFoo()函数。看起来就像我们在JavaScript中使用闭包一样。
如果有人找到更好的方法。请在此处发布。

当使用“controllerAs”语法实例化控制器时,
上下文将绑定到具有指定名称的scope属性:

<div id="MyController" ng-controller="MyController as vm">
    <button ng-click="vm.foo()">
        Click foo
    </button>
</div>

从控制台执行的上述命令将执行与单击Click foo按钮相同的操作。

为什么要执行此操作?您还可以创建服务并将函数放在其中,然后从任何其他控制器/服务调用它们。没有其他方法(至少没有全局变量)@Derlin您可以检查一下我发布的解决方法是否适合这种情况。同样,您为什么需要在不调用
scope()的情况下访问外部变量
?您的解决方案可以工作,但也可能导致问题(请参阅ste2425的注释)不知道这是否是angular 2,但在angular 1中,这很容易导致错误。如果摘要周期没有运行,并且您执行了公开的方法,那么除非您手动运行摘要周期,否则不会发生数据绑定。(这件事发生在我不知情的情况下)。如果在摘要循环已经运行时手动运行摘要循环,它将引发异常。
$scope = angular.element(document.getElementById('MyController')).scope()

$scope.vm.foo('Hello');
$scope.$apply();