首页新闻找找看学习计划

angular问题

0
悬赏园豆:5 [已解决问题] 解决于 2016-03-15 09:16

.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才被赋值,这是为什么?我改怎么写才能让点击一下 全部都赋值呢?

keeppuching的主页 keeppuching | 初学一级 | 园豆:6
提问于:2016-03-11 15:00
< >
分享
最佳答案
0

或者在回调中,使用$scope.$apply()

收获园豆:4
幻天芒 | 高人七级 |园豆:36522 | 2016-03-11 19:20

什么啊 兄弟  我想知道为什么  另外 你请教一下,我上面这个例子用promise怎么写吗

keeppuching | 园豆:6 (初学一级) | 2016-03-14 09:10

@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;
}
幻天芒 | 园豆:36522 (高人七级) | 2016-03-14 20:36

@幻天芒:太感谢 你了

keeppuching | 园豆:6 (初学一级) | 2016-03-15 09:16
其他回答(1)
0

userName和pwd外面包一层:

$scope.$apply(function() {
    $scope.userName = res.rows.item(0).userName;
    $scope.pwd = res.rows.item(0).userName;
});

 

收获园豆:1
方木一 | 园豆:332 (菜鸟二级) | 2016-03-11 17:18

 什么啊 兄弟  我想知道为什么  另外 你请教一下,我上面这个例子用promise怎么写吗

支持(0) 反对(0) keeppuching | 园豆:6 (初学一级) | 2016-03-14 09:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册