如何从另一个控制器运行函数,以便以角度更新范围?

时间:2016-07-15 15:19:29

标签: angularjs

在下面的示例中,如何从另一个控制器运行getData并更新视图中的范围变量?

// web/api/server.js

var fovea = require('../fovea.js');

// rest of the code

var lay = new fovea.Layer2D("red", "layer");

console.log(lay.name);
// >> "red"

2 个答案:

答案 0 :(得分:1)

使用$broadcast$on

  

$ broadcast 将事件名称向下调度到所有子范围(及其子级),并通知已注册的$ Scope侦听器。事件生命周期从调用$ broadcast的范围开始。通知此范围内事件的所有听众。

     

$ on 侦听给定类型的事件。它可以捕获$ broadcast

发送的事件
app.controller('MyController', ['$scope', '$http', 'MyService', function($scope, $http, MyService){
   $scope.$on('variableChanged',function(event, value) { 
      $scope.myVariable = value;
   };
}]);


app.controller('MyController2', ['$scope', '$http', 'MyService', function($scope, $http, MyService){
  MyService.getData().then(function(response){
     $scope.$broadcast('variableChanged', response.data);
  });
}]);

答案 1 :(得分:0)

angular.module('app').controller('nav', function($scope,$http) {
 $rootScope.$on("CallMethodNavController", function(){
   $scope.navMethod();
}); 
$scope.navMethod=function(){
$http.get('/players').then(function(data) {
$scope.numOfPlayers = data.players.length;
}    
});
});

然后在第二个控制器中,一旦添加了一个玩家,你就会调用这个方法:

    $rootScope.$emit("CallMethodNavController", {});