在下面的示例中,如何从另一个控制器运行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"
答案 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", {});