2016-06-10 5 views
0

AngularJS, Monaca 및 Onsen UI로 개발 된 크로스 플랫폼 응용 프로그램이 있습니다.부울 값이 AngularJS 및 SQLite에 등록되지 않았습니다.

정보 저장을 위해 프로젝트에 SQLite 로컬 데이터베이스를 구현하려고합니다. 정보는 전화가 끊어 지거나 앱이 종료 된 후에도 유지되어야합니다.

보기에서 사용자에게 몇 가지 값을 입력하라고합니다. 그 값은 SQLite 로컬 데이터베이스에 대해 검사되고 일치하는 것이 발견되면 사용자는 성공 메시지를받습니다. 일치하는 항목이 없으면 사용자는 실패 메시지를받습니다.

보기가 완료되었으며 사용자 입력을 등록하고 있습니다. 또한 구현 된 SQLite 데이터베이스가 있고 테스트를 위해 일부 값이 미리 채워져 있습니다.

내보기에는 일치하는 항목이 있는지 확인하고 해당 컨트롤러에서 SQLite 로컬 데이터베이스에서 일치하는 항목을 발견하면 true/false를 반환하는 부울 값이 있습니다.

그러나 내 견해로는 ng-if는 사용자가 페이지의 요소와 상호 작용할 때까지 항상 컨트롤러의 초기화 된 부울 값 (이 경우 false)을 표시합니다. 컨트롤러를 app.js 내에서 다음

<div ng-if="success"> 
    <p>Success!</p> 
</div> 

<div ng-if="!success"> 
    <p>Fail!</p> 
</div> 

를 다음과 같이 내 view.html I 설정에서

내 경우 NG가-I는 성공 부울을 초기화하고, 사용자에 대한 내 데이터베이스를 확인 입력 된 값은 아래와 같습니다.

$scope.success = false; 

// Initialising Database variable 
var db; 
document.addEventListener("deviceready", onDeviceReady, false); 

function onDeviceReady() { 
    db = window.openDatabase("myDB", "1.0", "MyDB", 200000); 
    db.transaction(createDB, errorCB, successCB); 
    db.transaction(queryDB, errorCB, successCB); 
} 

function createDB(tx) { 
    tx.executeSql('DROP TABLE IF EXISTS values'); 
    tx.executeSql('CREATE TABLE IF NOT EXISTS values (id INTEGER PRIMARY KEY, name)'); 
    tx.executeSql('INSERT INTO values (id, name) VALUES (1, "Lorem Ipsum")'); 
} 

function queryDB(tx) { 
    tx.executeSql('SELECT * FROM values', [], querySuccess, errorCB); 
} 

function querySuccess(tx, results) { 
    var len = results.rows.length; 

    // There are records in the Database 
    if (len != 0) 
    { 
     // Checking user value against DB records happen here - ommited becasue not relevant - working and returns true here 
     $scope.success = true; // This should set my view.html ng-if to true 
    } 
    // There are NO records in the Database 
    else 
    { 
     $scope.success = false; 
    } 
} 

view.html은 항상 을 표시합니다. 컨트롤러의 값이 true로 설정된 것을 console.log()가 표시하더라도. 또한 페이지에 간단한 정보 버튼이있어 사용자에게 몇 가지 정보 만있는 모달을 표시합니다. 그것을 누르면 정보 버튼에 트리거가 없더라도 success 부울은 true로 설정됩니다.

왜 이런 일이 발생하는지 설명해주세요. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

1

당신은이주기를 소화하기 위해 추가해야 $timeout

$timeout(function(){ 
    $scope.success = false; 
}, 1) 
처럼 사용할 수 있습니다
관련 문제