在angularJs服务中获取id未定义

时间:2014-12-13 06:43:00

标签: angularjs angularjs-scope

我已经按照教程:http://viralpatel.net/blogs/angularjs-service-factory-tutorial/

但是,当我尝试保存新记录时,我将newcontact.id视为未定义且无法保存新记录。

会出现什么问题?

1 个答案:

答案 0 :(得分:0)

你需要添加这段代码

var original = {itemCategory:null,itemName:null,
itemPrice:null,purchaseDate:null,applianceType:null,
insStatus:null,id:null};
$scope.newitem = angular.copy(original);

并编辑saveItem函数

$scope.saveItem = function () {
    alert("add new");
    DataStoreService.save($scope.newitem);
    $scope.newitem = angular.copy(original);
}

这是工作Plunker

请注意,我删除<script src="angular-dropdowns.min.js"></script>的{​​{1}}和ngDropdowns依赖关系,以消除导致此问题的一些控制台错误。


问题的原因

获取var app = angular.module('app', ['ngDropdowns']); id的问题是,您没有在控制器中定义名为undefined的变量,而是直接使用$scope.newitem中的newitem,然后您的控制器在更改任何输入之前就不会知道此HTML

如果您更改任何输入说newitem,那么控制器知道没有名为itemName的{​​{1}}变量,那么angular将创建$scope对象和{{ 1}} newitem对象内的属性,更改newitem输入后说你改变itemName然后控制器搜索newitem对象并放置属性{{1}在对象中,好了,现在你在itemName里面有两个属性,就像你的输入过程一样明智,但是itemPrice字段是一个隐藏的字段,你不会改变里面的值html,这意味着您的newitem对象中没有itemPrice属性。这就是它未定义的原因。

疤痕化,

newitem函数中添加一行作为id的第一个语句并检查newitem对象,这里是Plunker来测试它

  1. 按住保存而不更改任何输入

    enter image description here

    此红色id是因为我们将console.log($scope.newitem);传递给 $scope.saveItem 服务,因此脚本无法获取{{1} } $scope.newitem的字段,can not read id of undefined error$scope.newitem项目为undefined

  2. 仅更改id并按保存

    enter image description here

    在这里,您会得到一个item undefined,这是因为行alert("save"+ item.id);)中的提醒。在不是undefined 这一行itemName中,但未设置对象的alert属性,因此 saveundefined为{{ 1}} ,这就是它警报alert("save"+ item.id);)的原因。 项目为itemundefinedid

  3. <强>解决方案

    创建一个对象以保存所有item.id属性的默认值

    undefined

    获取该对象的深层副本并将其分配给saveundefined

    defined

    保存item.id后,将undefined对象重置为我们定义的默认对象

    newitem