非 GET 实例操作 $save
在我的示例中不起作用。我总是收到错误,$save
不是一个函数。问题是,我不知道必须在哪里定义 $scope.example = new Resource();
,因为在我的示例中我使用了 2 个 Controller 。一个用于包含对象的表列表,另一个用于我的模式窗口,您可以在其中进行 CRUD 操作。 CRUD 操作在 Angular 服务中定义。
代码结构如下:
资源服务:
...
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.'
},
...];
带有表单的 View :
<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
表达式。但我试图使用表单 View 而不生成然后工作。但我需要生成的表单 View (上面的示例 View )。
错误消息:
Error: ngRepeat:dupes Duplicate Key in Repeater
Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys.
最佳答案
如果您不想创建新对象,则需要在服务选项(工厂、服务、提供商)之间选择服务。
工厂和服务之间的区别在于语法。只是语法。
.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;
});
工厂退回的所有东西都是可用的。
服务在调用时自动创建一个新对象,这使得该对象(“this”)可用
调用服务或工厂保持不变:
var a = service.getA();
var a = factory.getA();
编辑
还请注意,您可以决定您的 Promise 是转到下一个错误还是成功调用。
就像一个例子:
xhr()
.then(成功1,错误1)
.then(成功2,错误2)
.then(成功3,错误3)
...
成功和错误都是回调函数。
通过使用 $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;
});
}
}
关于javascript - 错误 : . $save 不是函数(AngularJS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31262068/