Angularjs 由控制器值解决的服务承诺
因此,我有一个服务Angularjs 由控制器值解决的服务承诺,angularjs,promise,Angularjs,Promise,因此,我有一个服务mainService,其中有一个创建承诺的函数: this.myPromise = function() { var deferred = $q.defer(); var promise = deferred.promise; return promise; } 我有一个控制器secondController,当承诺得到解决时,我希望我的代码在这里运行 mainService.myPromise() .t
mainService
,其中有一个创建承诺的函数:
this.myPromise = function() {
var deferred = $q.defer();
var promise = deferred.promise;
return promise;
}
我有一个控制器secondController
,当承诺得到解决时,我希望我的代码在这里运行
mainService.myPromise()
.then(filterpanel)
function filterpanel(handle) { ... }
我还有一个mainController
,我想在那里运行一些代码,当代码成功时,我想解决我服务中的承诺
function count (a * b) {
if ((a * b) === 10) {
mainService.myPromise('ok');
}
}
我试图把我的承诺改成这样,但那似乎不起作用。你知道我怎样才能做到这一点吗
this.myPromise = function(data) {
var deferred = $q.defer();
var promise = deferred.promise;
if (data) {
deferred.resolve('ok');
}
return promise;
}
编辑:我之所以需要它,是因为当我的应用程序加载时,我会通过websocket连接到另一个应用程序
与该应用程序的通信分为三个步骤
secondController
在这3个步骤完成之前已经启动,因此我还没有正确的句柄
这就是为什么我想做出承诺,让第二个控制器等待第一个控制器具有正确的ID。如果您不深入了解需要它的原因,那么您的问题的解决方案就在那里 现场示范 角度模块('ExampleApp',[]) .controller('ExampleController',函数($scope,mainService){ $scope.text=“确定”; $scope.action=function(){ mainService.resolve($scope.text); } }) .controller('SecondController',函数($scope,mainService){ $scope.subscribe=函数(){ mainService.myPromise().then(filterpanel); } 功能过滤器面板(手柄){ $scope.textFromExampleCtrl=handle; console.log('来自SecondController',句柄); } }) .服务('mainService',功能($q){ var-promise=null; var=null; 返回{ myPromise:function(){ 递延=$q.defer(); 允诺,允诺; 回报承诺; }, 解析:函数(val){ 如果(延期) 延迟。解决(val); } } });代码>
行动
履行诺言
{{textFromExampleCtrl}}
我会尽量不模糊控制器和服务的服务状态。通常,服务对传递的数据进行处理或获取数据。如果你需要一个服务的实例,通过一些计算,你的控制器需要提供更多的信息,考虑把两个动作拆分成单独的单独的进程,它们自己运行并将它们链接起来。如果不考虑返回包含计算状态的对象的工厂方法。需要什么?你所做的一切似乎就是产生一个承诺?为什么不直接用Start中的数据调用您的服务呢?您的代码中没有一个静态承诺,而是在每次调用myPromise
时创建一个新的承诺。那不行。需要的是我的第二个控制器必须等待在我的主控制器中分配值后运行他的代码。我的secondController需要该值才能与API通信。所以我认为承诺是最好的解决方案?我是AngularJS的新手,在我读过的其中一个教程中,他们告诉我可以通过服务在控制器之间进行通信。这就是我现在要做的。你有必要更详细地说明你想要实现的目标。扩展你的问题。也许,你应该使用事件。看到了吗?嗨,我更新了我原来的问题。也许现在已经清楚了?