使用AngularJS

时间:2016-11-24 18:45:01

标签: javascript angularjs sqlite object

我的视图中有一个表单,要求用户提供一些详细信息,例如id,姓名。为此,我在服务中创建了一个人物对象,如下所示,以保存用户信息。

var personObject = angular.module("personObject", []);
personObject.service("PersonObject", function () {
    var Person = {
        id: "",
        name: "",
        surname: ""
    };
    return {
        getPerson: function () {
            return Person;
        }
    };
});

当用户填写表单时, id name surname 的值在 Person 中设置。这是按预期工作的,我可以在视图控制器中使用 get()查看详细信息。

然后我将person对象传递给另一个应该在SQLite数据库表中插入用户详细信息的服务。从我的视图控制器中,我将详细信息保存到我的 $ scope.save 函数中的数据库中。

var formDetails = angular.module("formDetailsController", []);
formDetails.controller("FormDetailsController", function ($scope, UpdatePerson, PersonObject) {
    var init = function () {
        document.addEventListener("deviceready", onDeviceReady, false);
    };

    init();

    function onDeviceReady() {
    };

    // Save details to database 
    $scope.save = function () {
        var update = UpdatePerson.update(PersonObject.getPerson()); // Get the person object with user defined values and pass to UpdatePerson service
    update.then(
            function (success) {
                // ToDo
            }, function (fail) {
                alert(fail.message);
            });
    };
});

我的 UpdatePerson 服务应该将person对象值插入SQLite表。该表按预期工作,并已使用一些硬编码值进行测试。我的 update()函数如下所示(给出完整代码)。但是,我无法访问person对象值。

var update = angular.module("updatePerson", []);
update.service("UpdatePerson", function ($q, Database) {
    // Initialise variables
    var db = Database.init(); // Working
    var updated = "";

    var myFunctions = {
        update: function (MyPerson) {
        alert("MyPerson + // Returns [object Object]
            "\n" + MyPerson.id + // Returns nothing
            "\n" + MyPerson.name + // Returns nothing
            "\n" + MyPerson.surname // Returns nothing);

            var deferred = $q.defer();
            var sql = 'INSERT OR IGNORE INTO tb_person (id, name, surname) VALUES (' + MyPerson.id + ', "' + MyPerson.name + '", "' + MyPerson.surname + '")';
            var success = function (tx, results) {
                deferred.resolve({ updated: true });
            }
            var error = function (tx, err) {
                deferred.reject({
                    updated: false, message: 'An error has occured});
            }

            db.transaction(function (tx) {
                tx.executeSql(sql, [], success, error);
            });

            return deferred.promise;
        },
    }
    return myFunctions;
});

我无法在上面的 update()函数中访问我的 Person 对象的值,无法插入到表中。它返回一个空白(不是NULL或未定义) - 只是空白。如何访问对象值?

1 个答案:

答案 0 :(得分:0)

我认为你缺少声明

    .factory('Service1',['Service2', function (service2,$q, $timeout) {

      var sendDataToOtherService= function (data) {

          service2.updateData(data[0]);

                return true;
            }
          return {
            sendDataToOtherService:sendDataToOtherService
        };

}])
.factory('Service2', function ($q, $timeout) {
        var updateData= function (data) {


          alert(data.name);

                return true;
            }
          return {
            updateData:updateData
        };

});

看一下demo Link http://plnkr.co/edit/oz7BA6rTW8vYuIHOYBxL?p=preview