2016-09-07 4 views
1

Ich versuche, Daten von Websql zu lesen. Der Code funktioniert gut, wenn ich alles in den Controller setze, aber es gibt kein Ergebnis zurück, wenn ich den Code in einen separaten Dienst verschoben habe. Ich möchte Daten vom Dienst und nicht vom Controller abrufen.Angular JS Versprechen dann() nicht ausgeführt

javascript:

var myApp = angular.module('myApp',[]); 
myApp.controller('MyCtrl', ['$scope', 'myService', '$q', function ($scope, myService, $q) { 
     $scope.count = 0; 
     $scope.connect = function() { 
      var deferred = $q.defer(); 
    myService.method1().then(function(results){ 
       $scope.count = results.rows.length; 
       }, 
      function (error) { 
      console.log("Error"); 
      } 
     ); 
}]) 

myApp.service('myService', function($q) { 
    var deferred = $q.defer(); 
    this.method1 = function() { 
        var db = openDatabase('mydb2', '1.0', 'Test DB', 2 * 1024 * 1024); 
     var msg; 

     db.transaction(function (tx) { 
      tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)'); 
      tx.executeSql('INSERT INTO LOGS (id, log) VALUES (3, "foobar")'); 
      tx.executeSql('INSERT INTO LOGS (id, log) VALUES (4, "logmsg")'); 
      msg = '<p>Log message created and row inserted.</p>'; 
      document.querySelector('#status').innerHTML = msg; 
     }); 

     db.transaction(function (tx) { 
      tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) { 
       if(results.rows.length > 0) { 
        console.log("Inside resolve"); 
       deferred.resolve(results); 
       $scope.$apply(); 
       } else { 
        deferred.reject(response); 
       } 
      }, null); 
     }); 

     return deferred.promise; 
     }; 

}); 

Markup:

<div ng-controller="MyCtrl"> 
{{count}} 

    <div id="status" name="status">Status Message</div> 
</div> 

JSfiddle: http://jsfiddle.net/pc97fgfg/9/

+1

die Geige ist sinnlos, weil es unmöglich –

+0

ausführen kann 'console.log (" Inside resolve ");' ausgeführt werden? –

+0

in dieser Zeile, 'deferred.reject (Antwort);' - Was ist 'Antwort'? scheint eine aus der Luft gegriffene Variable zu sein –

Antwort

0

Ich habe das erwartete Ergebnis von $rootScope.$apply(); nach deferred.resolve(results); verwenden.

Aktualisiert Geige ist http://jsfiddle.net/pc97fgfg/14/

Dank neda für Vorschlag.

Verwandte Themen