如何在服务中定义 CRUD 操作 (AngularJS)
How do I define CRUD operations in a service (AngularJS)
我在服务中的 CRUD 操作有问题。当我点击 Create Btn 时,它正在创建一个对象,但它不会将该对象推送到 table 列表中。
Ctrl(table 列表在哪里):
$scope.nameslist = CrudService.getAll();
Ctrl(模式对话框):
$scope.createItem = function (newObj) {
CrudService.create(newObj);
$scope.newObj = null;
$scope.ok();
}
CRUD 服务(它是一个 .factory):
...
return {
getAll: function () {
return resService.names.query();
},
create: function (newObj) {
resService.names.save(newObj);
//this.getAll.push(newObj); //this doesn't work
}
...
请求服务(也是一个.factory):
...
return {
names: $resource(baseUrl + '/api/names/:Id', {
Id: '@Id'
}, {
'update': {
method: 'PUT'
}
})
...
谁能帮帮我?如何将新对象推送到 table 列表中?
创建对象后,您可以将对象推送到列表或调用 getAll
$scope.createItem = function (newObj) {
CrudService.create(newObj);
$scope.newObj = null;
$scope.ok();
\either
$scope.nameslist = CrudService.getAll();
\or
$scope.nameslist.push(newObj); // this assumes this is an array
}
更新///
$broadcast 将消息向下发送到子控制器,而 $emit 将它们向上发送。
使用 $rootscope.$emit 首先将其注入控制器
.controller('myCtrl' ['$scope', '$rootscope', function($scope, $rootscope ...
然后你可以使用 $rootscope.$emit('added-Name')
或者你甚至可以添加一个参数 $rootscope.$emit('added-Name', {newObj: newobj})
然后在捕捉控制器中
$rootscope.$on('added-Name'), function(event, args) {
$scope.namelist.push(args.newObj);
//or if you're not passing the argument
$scope.nameslist = CrudService.getAll();
});
使用共享服务:
angular.module('myApp').service('sharedService', function(){
var nameList = [];
return{
get: function(){
return nameList;
}
set: function(val){
nameList = val;
}
add: function(name){
nameList.push(name);
}
}
})
将共享服务注入控制器
`.controller('ctrl', ['$scope', 'sharedService', function($scope, sharedService ....
用 sharedService.set(CrudService.getAll());
填写服务中的 nameList,在 $scope.createItem 中你可以 sharedService.add(newObj);
那你就可以在sharedService.get()
上观看了
$scope.$watch(function() {
return sharedService.get();
}, function(newValue, OldValue) {
if (newValue !== OldValue) {
$scope.namesList = sharedService.get();
}
});
我在服务中的 CRUD 操作有问题。当我点击 Create Btn 时,它正在创建一个对象,但它不会将该对象推送到 table 列表中。
Ctrl(table 列表在哪里):
$scope.nameslist = CrudService.getAll();
Ctrl(模式对话框):
$scope.createItem = function (newObj) {
CrudService.create(newObj);
$scope.newObj = null;
$scope.ok();
}
CRUD 服务(它是一个 .factory):
...
return {
getAll: function () {
return resService.names.query();
},
create: function (newObj) {
resService.names.save(newObj);
//this.getAll.push(newObj); //this doesn't work
}
...
请求服务(也是一个.factory):
...
return {
names: $resource(baseUrl + '/api/names/:Id', {
Id: '@Id'
}, {
'update': {
method: 'PUT'
}
})
...
谁能帮帮我?如何将新对象推送到 table 列表中?
创建对象后,您可以将对象推送到列表或调用 getAll
$scope.createItem = function (newObj) {
CrudService.create(newObj);
$scope.newObj = null;
$scope.ok();
\either
$scope.nameslist = CrudService.getAll();
\or
$scope.nameslist.push(newObj); // this assumes this is an array
}
更新/// $broadcast 将消息向下发送到子控制器,而 $emit 将它们向上发送。 使用 $rootscope.$emit 首先将其注入控制器
.controller('myCtrl' ['$scope', '$rootscope', function($scope, $rootscope ...
然后你可以使用 $rootscope.$emit('added-Name')
或者你甚至可以添加一个参数 $rootscope.$emit('added-Name', {newObj: newobj})
然后在捕捉控制器中
$rootscope.$on('added-Name'), function(event, args) {
$scope.namelist.push(args.newObj);
//or if you're not passing the argument
$scope.nameslist = CrudService.getAll();
});
使用共享服务:
angular.module('myApp').service('sharedService', function(){
var nameList = [];
return{
get: function(){
return nameList;
}
set: function(val){
nameList = val;
}
add: function(name){
nameList.push(name);
}
}
})
将共享服务注入控制器 `.controller('ctrl', ['$scope', 'sharedService', function($scope, sharedService ....
用 sharedService.set(CrudService.getAll());
填写服务中的 nameList,在 $scope.createItem 中你可以 sharedService.add(newObj);
那你就可以在sharedService.get()
上观看了$scope.$watch(function() {
return sharedService.get();
}, function(newValue, OldValue) {
if (newValue !== OldValue) {
$scope.namesList = sharedService.get();
}
});