如何在服务中定义 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();
            }
        });