2017-03-02 6 views
0

.serviceから.controllerでユーザーの値を取得したいのですが、どうすればいいですか?誰も助けることができますか?ここで.controllerの.serviceから値を取得するにはどうすればいいですか?

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

pounchDBサービスでsetDatabase関数を呼び出すの例です:

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

サービスから、ネットワーク応答に基づいて後で解決または拒否するPromiseオブジェクトを返す必要があります。約束の非同期応答を知るために解決ハンドラと拒否ハンドラを追加する必要があります。

Aは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 
    } 
}]); 
を作業シミュレート
関連する問題