2017-03-02 27 views
0

我想获得用户从。服务.controller价值的价值,我该怎么办呢?谁能帮忙?我怎样才能得到。服务于.controller

app.controller("myCtrl", function($scope, $http, $pouchDB) { 
    $pouchDB.setDatabase("infoDB"); 
    $pouchDB.allDocs(); 
} 

app.service("$pouchDB", ["$rootScope", "$q", function($rootScope, $q) { 
    this.allDocs = function(docs){ 
    database.allDocs({ 
     include_docs: true 
    }) 
    .then (function(result){ 
     for (var i = 0; i < result.rows.length; i++){ 
      var users = result.rows[i].doc; 
     } 
    }); 
    } 
} 

回答

1

这里的调用setDatabase功能在pounchDB服务的例子:你需要返回一个用户阵列,而不会将重新

var app = angular.module('app', []); 
 

 
app.controller('myCtrl', function($scope, pouchDB) { 
 
    var result = pouchDB.setDatabase("infoDB"); 
 
    console.log(result); 
 
}); 
 

 
app.service('pouchDB', function() { 
 
    this.setDatabase= function(db){ 
 
    return db + " was called."; 
 
    } 
 
});
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.js"></script> 
 

 
<div ng-app="app"> 
 
    <div ng-controller="myCtrl"> 
 
    </div> 
 
</div>

allDocs功能

然后在循环分配给它:

.then (function(result){ 
    var users = []; 
    for (var i = 0; i < result.rows.length; i++){ 
     users.push(result.rows[i].doc); 
    } 
    return users; 
}); 

换句话说,你缺少的setDatabase()功能;在你的allDocs()函数中,你需要一个return users结果数组;在你的控制器,你需要获得的价值:$scope.result = $pouchDB.allDocs();

1

从你需要返回无极对象服务,这将解决或拒绝之后基于网络的响应。您需要添加解析处理程序和拒绝处理程序以了解承诺异步响应。

一个模拟工作plunker

app.controller("myCtrl", function($scope, $http, $pouchDB) { 
    $pouchDB.setDatabase("infoDB"); 
    //resolve handler and reject handler to thenable object 
    $pouchDB.allDocs().then(function(result) { 
    $scope.users = []; 
    for (var i = 0; i < result.rows.length; i++) { 
     $scope.users.push(result.rows[i].doc); 
    } 
    }, 
    function(err){console.log('error')} 
); 
}); 

app.service("$pouchDB", ["$rootScope", "$q", function($rootScope, $q) { 
    this.allDocs = function(docs) { 
    return database.allDocs({ 
     include_docs: true 
    }); //return promise 
    } 
}]);