控制器方法没有返回值,延长控制器
问题描述:
我有一个控制器谁再延长控制器:控制器方法没有返回值,延长控制器
我需要第二个控制器的方法的结果收到第一控制器的可变
第一个控制器:
angular.module('Gestios').controller('EmpresasControllerList', function($scope, $controller) {
angular.extend(this, $controller('AppController', {
$scope: $scope
}));
$scope.App = $scope.runApp('empresas', true);
console.log($scope.App);
});
第二个控制器:
app.controller('AppController', function ($scope, $controller, AppFactory) {
$scope.runApp = function (AppPermalink, GetResults, Filters, Callback) {
if(!angular.isDefined(Filters)){Filters = $scope.Filters;}
var App = {
Load : {
busy: false,
page: 1
},
Info: {},
Results: []
};
AppFactory.Applications(AppPermalink).then(function (data) {
App.Info = data.data[0];
if(GetResults){
AppFactory.Items(AppPermalink, Filters).then(function (data) {
App.Results = {
list: data.data.data,
count: data.data.total
};
if(typeof(Callback) == "function"){Callback(true, {results: App.Results.list, count: App.Results.count});}
return App;
},function() {
App.Results = {
list: [],
count: 0
};
if(typeof(Callback) == "function"){Callback(false, {results: App.Results.list, count: App.Results.count});}
return App;
});
}
},function (error) {
swal("Algo ha ido mal", error.error, "error");
});
};
});
});
http调用接收数据 ¿问题可能是由异步http调用引起的?
答
用我的回调解决了这个问题:对
第一控制器:第二控制器
angular.module('Gestios').controller('EmpresasControllerList', function($scope, $controller) {
angular.extend(this, $controller('AppController', {
$scope: $scope
}));
$scope.runApp('empresas', true, false, function(Result, App){
if(Result){
$scope.App = App;
}
});
});
方法(AppController中):
$scope.runApp = function (AppPermalink, GetResults, Filters, Callback) {
if(!angular.isDefined(Filters)){Filters = $scope.Filters;}
var App = {
Load : {
busy: false,
page: 1
},
Info: {},
Results: []
};
AppFactory.Applications(AppPermalink).then(function (data) {
App.Info = data.data[0];
if(GetResults){
AppFactory.Items(AppPermalink, Filters).then(function (data) {
App.Results = {
list: data.data.data,
count: data.data.total
};
if(typeof(Callback) == "function"){Callback(true, App);}
},function() {
App.Results = {
list: [],
count: 0
};
if(typeof(Callback) == "function"){Callback(false, App);}
});
}
},function (error) {
swal("Algo ha ido mal", error.error, "error");
});
};
有人考虑创建围绕一个基于回调的包装基于承诺的API将成为反模式。请参阅[为什么是承诺回调'.then'方法反模式](http://stackoverflow.com/questions/35660881/why-are-callbacks-from-promise-then-methods-an-anti-pattern) 。 – georgeawg