Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TypeError:undefined不是角度资源中的函数_Javascript_Angularjs_Angularjs Directive_Angularjs Scope_Angularjs Resource - Fatal编程技术网

Javascript TypeError:undefined不是角度资源中的函数

Javascript TypeError:undefined不是角度资源中的函数,javascript,angularjs,angularjs-directive,angularjs-scope,angularjs-resource,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,Angularjs Resource,当尝试在AngularJS资源上轮询自定义方法copies时,我在angular.js:10033处遇到以下错误:(方法copy工作正常。) Angular.js 10016-10035: function consoleLog(type) { var console = $window.console || {}, logFn = console[type] || console.log || noop, hasApply = false; // Note:

当尝试在AngularJS资源上轮询自定义方法
copies
时,我在
angular.js:10033
处遇到以下错误:(方法
copy
工作正常。)

Angular.js 10016-10035:

function consoleLog(type) {
  var console = $window.console || {},
      logFn = console[type] || console.log || noop,
      hasApply = false;

  // Note: reading logFn.apply throws an error in IE11 in IE8 document mode.
  // The reason behind this is that console.log has type "object" in IE8...
  try {
    hasApply = !!logFn.apply;
  } catch (e) {}

  if (hasApply) {
    return function() {
      var args = [];
      forEach(arguments, function(arg) {
        args.push(formatError(arg));
      });
      return logFn.apply(console, args); // This is line 10033 where the error gets thrown.
    };
  }
简化资源:

angular.module('vgm.content-pages')
.factory('ContentPage', function($resource, $http) {

  return $resource('/api/content-page/:id', { id:'@page.id' }, {
    copy: {
      method: 'POST',
      url: '/api/content-page/copy/:id'
    },
    copies: {
      method: 'GET',
      isArray: true,
      url: '/api/content-page/copies/:id'
    }
  });

});
mod.factory('Ansprechpartner', ['$resource',
    function ($resource) {
        return $resource('/api/Ansprechpartner/:id', 
            { id: '@ID' },
            {
                "update": { method: "PUT" },
                "searchByName": { method: "GET", url: "/api/Ansprechpartner/searchByName/:name", isArray: true }
            }
        );
    }
]);
得到错误的简化指令:

angular.module('vgm.genericForms')
.directive('vgmFormCopyPicker', function() {

  return {
    restrict: 'E',
    replace: true,
    templateUrl: '/static/common/generic-forms/widgets/view-copy-picker.html',
    scope: {
      resource: '=',
    },
    controller: function($scope, $element) {

      $scope.pages = [];

      $scope.loadCopies = function() {

        $scope.resource.$copies()
          .then(function(response) {
            $scope.pages = response.data;
          });

      };

    }
  };

});
只要运行
loadCopies
方法,执行行
$scope.resource.$copies()
就会抛出上面的错误

在Chrome Inspector中,我看到对API的调用实际上已经完成。但解决承诺似乎会带来一些错误

如何解决此错误

编辑:

Angular Resource正在尝试用项目数组覆盖我的初始资源。但是Resource的实例当然没有方法
push

我找到了答案:

资源应该在其剩余生命周期内表示匹配的数据对象。如果要获取新数据,应使用新对象

$scope.copies = ContentPage.copies()

Guido的回答是正确的,但我第一次没有得到

如果您将自定义方法添加到您的
$resource
中,并使用
isArray:true
,希望从您的Web服务中获得一个数组,您可能希望将响应存储在一个数组中

因此,您不应该像这样使用实例方法:

var ap = new Ansprechpartner();
$scope.nameDuplicates = ap.$searchByName(...);
但是直接使用资源:

$scope.nameDuplicates = Ansprechpartner.searchByName(...)
使用以下角度资源:

angular.module('vgm.content-pages')
.factory('ContentPage', function($resource, $http) {

  return $resource('/api/content-page/:id', { id:'@page.id' }, {
    copy: {
      method: 'POST',
      url: '/api/content-page/copy/:id'
    },
    copies: {
      method: 'GET',
      isArray: true,
      url: '/api/content-page/copies/:id'
    }
  });

});
mod.factory('Ansprechpartner', ['$resource',
    function ($resource) {
        return $resource('/api/Ansprechpartner/:id', 
            { id: '@ID' },
            {
                "update": { method: "PUT" },
                "searchByName": { method: "GET", url: "/api/Ansprechpartner/searchByName/:name", isArray: true }
            }
        );
    }
]);

我正在使用
Mean.js
,这困扰了我几个小时。有一个内置的
$update
,但当我试图将它应用于
$resource
返回的对象时,它不起作用。为了让它工作,我必须改变调用资源来更新它的方式

例如,对于
Student
模块,我将它与
$resource
一起返回到
$scope.Student
中。当我试图更新
student时,$update
返回此错误。通过将调用修改为
Students.update()
它解决了这个问题

$scope.update=function(){
var student=$scope.student;
var结果=student.update(student);
如果(结果){
$scope.message='Success';
}否则{
$scope.error=
“对不起,出了点问题。”;
}

};谢谢Guido。我也有同样的问题。我觉得这些文件有点混乱。如果我理解正确,就不能在/single/resource实例上调用isArray:true的实例方法,因为该实例不是数组。这是正确的。如果你仔细想想,它是有意义的:首先属性表示一个项目列表,然后突然它表示一个项目,这是不一致的。