Angular JS从控制器外部访问范围

时间:2016-03-09 19:34:42

标签: javascript angularjs cordova

所以我只是尝试将普通JS改为angular,我想知道如何从另一个.js文件访问我的控制器范围。我环顾四周,我尝试了几种方法,但没有运气。

我发现了类似的问题,例如

AngularJS. How to call controller function from outside of controller component

AngularJS access scope from outside js function

我不打算对范围值进行任何更改,而只是使用范围内的函数。关于我如何从另一个.js文件中的控制器范围调用函数的任何想法?

4 个答案:

答案 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 ,而不是控制器的名称。

Fiddle

答案 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>