非GET实例操作$save
在我的示例中不起作用。我总是得到错误,$save
不是函数。问题是,我不知道在哪里定义$scope.example = new Resource();
,因为在我的例子中我使用的是2个控制器。一个用于包含对象的表列表,另一个用于我的模态窗口,您可以在其中执行CRUD操作。 CRUD操作在角度服务中定义。
代码结构如下:
资源服务:
...
return {
name: $resource(baseUrl + '/api/name/:Id', {
Id: '@Id'
}, {
'update': {
method: 'PUT'
}
}),
...
CRUD的服务:
...
return {
create: function (newName) {
return newName.$save();
},
...
模态窗口的Ctrl:
$scope.selected = new resService.name();
$scope.createItem = function (newName) {
CrudService.create(newName).then(
function () {
$scope.dataSuccess = 'Person created.';
$scope.newName = null;
},
function (err) {
$scope.dataError = err.data.ModelState;
});
}
}
$scope.form = [{
label: 'Firstname',
fieldType: 'text',
name: 'Fname',
id: 'fname-id',
propertyName: 'fname',
disabled: false,
pattern: /^[a-zA-Z]{4}[a-zA-Z]*/,
required: true,
errRequired: 'Firstname is required.',
errPattern: 'Firstname has at least 4 letters.'
},
...];
表单视图:
<form class="form-horizontal" name="editForm" novalidate>
<div class="form-group-sm has-feedback" ng-repeat="elem in form" ng-class="{ 'has-error' : hasError(editForm, elem.name), 'has-success' : hasSuccess(editForm, elem.name) }">
<label class="control-label" for="{{elem.id}}">{{elem.label}}</label>
<input type="{{elem.fieldType}}"
class="form-control"
placeholder="{{elem.label}}"
name="{{elem.name}}"
id="{{elem.id}}"
ng-model="selected[elem.propertyName]"
ng-disabled="{{elem.disabled}}"
ng-pattern="elem.pattern"
ng-required="{{elem.required}}"
/>
<p class="help-block" ng-if="elem.errRequired" ng-show="editForm[elem.name].$error.required && editForm[elem.name].$touched">{{elem.errRequired}}</p>
<p class="help-block" ng-if="elem.errPattern" ng-show="editForm[elem.name].$error.pattern">{{elem.errPattern}}</p>
编辑:
我收到一个新的错误。控制台告诉我,我必须使用track by
表达式。但我试图使用窗体视图而不生成然后工作。但我需要生成的表单视图(上面的示例视图)。
错误讯息:
错误:ngRepeat:dupes 中继器中的重复键
不允许在转发器中重复。使用'track by'表达式指定唯一键。
答案 0 :(得分:0)
如果您不想创建新对象,则需要在“服务”选项(工厂,服务,提供商)之间选择服务。
工厂和服务之间的区别在于语法。只是语法。
.factory(function(){
//Private variables and functions
var x = "ez";
function getX(){
return x;
}
//Public functions (or variables)
return {
a : "test",
getA : function(){
return a;
}
}
})
//Service example
.service(function(){
//Handled by Angular:
//new() is used to create a new object
//Private functions and variables
var x = "test";
function getX(){
return x;
}
//Public funcitons (and variables)
this.a = function(){
"test";
};
this.getA = function(){
return a;
};
//Handeled by AngularJS
//return this;
});
工厂退回的所有物品都可以使用 该服务在调用时会自动创建一个新对象,从而使对象可用(&#34; this&#34;)
致电服务或工厂保持不变:
var a = service.getA();
var a = factory.getA();
修改强>
另请注意,您可以决定您的承诺是进入下一个错误还是成功通话。
就像一个例子:
XHR()
.then(success1,error1)
.then(success2,error2)
.then(success3,error3)
...
成功和错误都是回调函数。
通过使用$q
,您可以转到下一个成功或错误,即回调。
问题代码
. factory ( 'YourFacotry' , [ '$resource' ,
function ( $resource ) {
return $resource ( '/api/note/:id' , { id : '@id' },
{
markAsDone :
{
url : '/api/note/:id/done' ,
method : 'POST' ,
isArray : true
}
});
}]);
Ctrl of modal window:
$scope.createItem = function () { //Forgot $scope here!
CrudService.query().then(
function () {
$scope.dataSuccess = 'Person created';
$scope.newName = null;
},
function (err) {
$scope.dataError = err.data.ModelState;
});
}
}