所以我只是尝试将普通JS改为angular,我想知道如何从另一个.js文件访问我的控制器范围。我环顾四周,我尝试了几种方法,但没有运气。
我发现了类似的问题,例如
AngularJS. How to call controller function from outside of controller component
AngularJS access scope from outside js function
我不打算对范围值进行任何更改,而只是使用范围内的函数。关于我如何从另一个.js文件中的控制器范围调用函数的任何想法?
答案 0 :(得分:4)
您可以这样称呼它: 例如html:
<div ng-app>
<div id="outer" ng-controller="MsgCtrl">
You are {{msg}}
</div>
<div onclick="change()">click me</div>
和JS:
function MsgCtrl($scope)
{
$scope.msg = "great";
}
function change()
{
//alert("a");
var scope = angular.element(document.getElementById('outer')).scope();
console.log(scope);
//scope.msg = 'Superhero';
}
正如您所看到的,您需要获取ID ,而不是控制器的名称。
答案 1 :(得分:0)
将id添加到应用ng-controller的标记处,然后获取范围就像这样简单:
<div ng-controller="MyController id="myScope">
</div>
..
var myScope = angular.element(myScope);
myScope.runSomeFn();
请参阅fiddle
答案 2 :(得分:0)
你需要注入$ controller服务来实例化任何其他Js中的控制器(你想用这个函数扩展的文件。我将在这个例子中使用另一个控制器):
var app = angular.module('myApp', []);
app.controller('fileCreateController',[function(){
this.action = 'Initial value';
this.fileCreate = function(value){
console.log('ACTION');
this.action = value;
}
}]);
app.controller('anyController', ['$controller', function($controller){
this.valueToSend = 'Changed value from fileCreateController';
angular.extend(this, $controller('fileCreateController'));
}]);
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
</head>
<body ng-controller="anyController as vm">
<button name="button" ng-click="vm.fileCreate(vm.valueToSend)">Click me</button>
<p>{{vm.action}}</p>
</body>
</html>
但是,如果可以,您应该使用要共享的功能创建服务,并将服务注入您想要使用此功能的任何位置。
答案 3 :(得分:0)
你也可以试试这个。
<script>
var myConEle = document.querySelector('[ng-controller=myController]');
var $scope = angular.element(myConEle).scope();
</script>
<div ng-controller="myController">
</div>