我已经按照教程:http://viralpatel.net/blogs/angularjs-service-factory-tutorial/
但是,当我尝试保存新记录时,我将newcontact.id视为未定义且无法保存新记录。
会出现什么问题?
答案 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来测试它
按住保存而不更改任何输入
此红色id
是因为我们将console.log($scope.newitem);
传递给 $scope.saveItem
服务,因此脚本无法获取{{1} } $scope.newitem
的字段,can not read id of undefined error
行$scope.newitem
。 项目为undefined
仅更改id
并按保存
在这里,您会得到一个item
undefined
,这是因为行alert("save"+ item.id);)
中的提醒。在不是undefined
这一行itemName
中,但未设置对象的alert
属性,因此 saveundefined
为{{ 1}} ,这就是它警报alert("save"+ item.id);)
的原因。 项目为item
但undefined
为id
<强>解决方案强>
创建一个对象以保存所有item.id
属性的默认值
undefined
获取该对象的深层副本并将其分配给saveundefined
defined
保存item.id
后,将undefined
对象重置为我们定义的默认对象
newitem