recherche

Maison  >  Questions et réponses  >  le corps du texte

angulaire.js - Comment appeler plusieurs services en même temps dans AngularJS?

Deux services sont définis dans le projet, get task et project, et si nous rassemblions leurs données dans le contrôleur puis attribuions des valeurs. Actuellement, j'utilise

 ?
jstaskService.get({id:id},function(data1){
    //...
    projectService.get({id:id},function(data2){
        //里面赋值的操作很长
        ...
    })
})

Pourriez-vous s'il vous plaît me dire comment écrire la méthode $q ? J'utiliserai cette opération d'acquisition de données dans de nombreux endroits. Comment puis-je la réutiliser ?

某草草某草草2814 Il y a quelques jours621

répondre à tous(3)je répondrai

  • 滿天的星座

    滿天的星座2017-05-15 16:54:24

    Je l'ai écrit selon votre demande, vous pouvez voir le code ci-dessous :

    javascriptmyApp.controller("MyController", ["$q", "taskService", "projectService", function($q, taskService, projectService){
        var deferred = $q.defer();
        var promise = deferred.promise;
    
        deferred.resolve(
            // 获取你要处理的对象
            var result = yourMethod.get({id: id});
        );
        deferred.reject(
            // 获取不到是打印错误
        )
    
        promise.then(function(result){
            // 如果经过taskService处理的数据还需要projectService进行处理的话,返回这个结果
            var obj = taskService.func(result);
            return obj;
        },function(error){ 
            // 错误处理
        })
            .then(function(result){
            // 用projectService处理获取到的对象
            projectService.func(result);
        },function(error){
            // 错误处理
        });
    }]);
    

    Si vous souhaitez le réutiliser, vous pouvez traiter le tout comme un service. Comme je ne connais pas votre code spécifique, c'est difficile à dire.

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-15 16:54:24

    Vous pouvez ajouter une méthode dans le service pour obtenir deux méthodes en même temps, par exemple :

    js// someService 中 伪代码
    someService.getAll = function(id) {
      var pmo = $q.all([taskService.get({id:id}), projectService.get({id:id})]);
      // 根据情况,可以写下边的代码,也可以直接返回这个pro
      pmo.then(....)
    }
    

    répondre
    0
  • 怪我咯

    怪我咯2017-05-15 16:54:24

    taskService.sub1 = function(post_data, callback) {
        projectService.get(post_data, function(rsp){
            if(angular.isFunction(callback)) {
                callback(rsp);
            }
        }
    }
    
    taskService.sub1({ id : 1 }, function(rsp){
        //里面赋值的操作很长
    });
    

    répondre
    0
  • Annulerrépondre