.controller('loginCtrl', ["$scope", function ($scope)
{
$scope.userName = "11111111111";
$scope.getData = function ()
{
//登陆后读取以前登陆信息
var db = window.sqlitePlugin.openDatabase({ name: "ss.db" });
db.executeSql("CREATE TABLE IF NOT EXISTS userbbb ([userName] CHAR(16), [pwd] CHAR(16))");
db.executeSql("INSERT INTO userbbb (userName,pwd) VALUES ('aaaaaaaaaaaaa3','3333333')");
db.executeSql("select userName,pwd from userbbb", [], function (res)
{
$scope.userName = res.rows.item(0).userName;
$scope.pwd = res.rows.item(0).userName;
},
function (error)
{
$scope.pwd = error;
});
$scope.end = "sssssssssssss";
}
}])
getData是一个按钮触发事件函数,第一次点击之后end被赋值成功,点击第二次,username和pwd才被赋值,这是为什么?我改怎么写才能让点击一下 全部都赋值呢?
或者在回调中,使用$scope.$apply()
什么啊 兄弟 我想知道为什么 另外 你请教一下,我上面这个例子用promise怎么写吗
@keeppuching: angular是脏检查进制判断数据变化。你在异步代码里执行的操作,没有通知到angular,所以脏检查就会晚一步。这就导致在下次检查的时候数据才生效了。
用Promise要看你用哪种。如果是ES6的,代码如下:
var p = new Promise((resolve, reject) => { db.executeSql("select userName,pwd from userbbb", [], (res) => resolve(res), (err) => reject(err)); });
Angular的话,有个$q,代码如下:
function fun(){ var deferred = $q.defer(); db.executeSql("select userName,pwd from userbbb", [], (res) => deferred.resolve(res), (err) => deferred.reject(err)); return deferred.promise; }
@幻天芒:太感谢 你了
userName和pwd外面包一层:
$scope.$apply(function() { $scope.userName = res.rows.item(0).userName; $scope.pwd = res.rows.item(0).userName; });
什么啊 兄弟 我想知道为什么 另外 你请教一下,我上面这个例子用promise怎么写吗