2016-05-10 22 views
0

我想從javascript方法的angularjs的控制器中調用該方法。所以我用下面的函數來調用。AngularJS:Sync從javascript中調用角度控制器中的方法

function ValidateLogin(data) { 
    var currentUser = angular.element(document.getElementById('bdyIndex')).scope().SlateProject_GetCurrentUser(); 

    if (currentUser.rows.length > 0) { 
     //doing the stuff 
    } 
} 

控制器看起來就像因此,從 「SlateProject_GetCurrentUser」,如果執行條件得到結果之前,以下

angular.module('indexApp', []) 
    .controller('indexController', function ($scope, $http) { 
      $scope.SlateProject_GetCurrentUser = function() { 
       var db = app.db; 
       db.transaction(function (tx) { 
       tx.executeSql("SELECT * FROM dbSlateProject WHERE ACTIVE = 1", [], 
       function (tx, e) { 
        console.log('Fetched Active Slate Project!') 
        return e; 
       }, 
       function (tx, e) { 
        alert(e.message); 
       }); 
      }); 
     } 
}); 

。所以它會給出錯誤,因爲「無法讀取屬性'行'的未定義」。我們如何通過同步來調用該方法。

回答

1

控制器:

angular.module('indexApp', []) 
.controller('indexController', function ($scope, $http) { 
     $scope.SlateProject_GetCurrentUser = function (callback) { 
      var db = app.db; 
      db.transaction(function (tx) { 
      tx.executeSql("SELECT * FROM dbSlateProject WHERE ACTIVE = 1", [], 
      function (tx, e) { 
       console.log('Fetched Active Slate Project!') 
       callback(tx) // is `tx` current user? replace it with current user if no 
      }, 
      function (tx, e) { 
       alert(e.message); 
      }); 
     }); 
    } 
}); 

你也可以像這樣訪問:您的幫助

function ValidateLogin(data) { 
    var currentUser = angular.element(document.getElementById('bdyIndex')).scope().SlateProject_GetCurrentUser(function(currentUser){ 
     if (currentUser.rows.length > 0) { 
     //doing the stuff 
     } 
    }); 
} 
+0

感謝。你能解釋一下嗎?我們如何傳遞參數給這個函數? –