2016-11-24 52 views
0

我有一个表单,要求用户查看一些细节,身份证,姓名和姓氏。为此,我在下面的服务中创建了一个人物对象,以保存用户信息。使用AngularJS访问传递给函数的对象值

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

当用户完成表单ID值在设置。这是按预期工作的,我可以在视图控制器中使用get()查看详细信息。

然后我将人员对象传递给另一个服务,它应该将用户详细信息插入到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服务应该插入人对象值的SQLite的表。该表正在按预期工作,并已用一些硬编码值进行了测试。我的更新()函数如下所示(完整的代码给出)。但我无法访问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; 
}); 

我无法访问我更新我的对象中的值()功能上面插入到表中。它返回一个空白(不是NULL或未定义) - 只是空白。我如何访问对象值?

+0

请添加完整更新方法。 – alphapilgrim

+0

现在已添加完整的代码片段。 – heyred

回答

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 
     }; 

}); 

看一看演示链接 http://plnkr.co/edit/oz7BA6rTW8vYuIHOYBxL?p=preview