Beim Versuch, eine benutzerdefinierte Methode copies
auf einer AngularJS Ressource abzufragen ich folgende Fehlermeldung bei angular.js:10033
erhalten: (. Die Methode copy
funktioniert gut)Typeerror: undefined ist keine Funktion in Angular Ressourcen
TypeError: undefined is not a function
at https://code.angularjs.org/1.3.0-beta.8/angular-resource.min.js:9:347
at Array.forEach (native)
at q (https://code.angularjs.org/1.3.0-beta.8/angular.min.js:7:280)
at q.then.p.$resolved (https://code.angularjs.org/1.3.0-beta.8/angular-resource.min.js:9:329)
at J (https://code.angularjs.org/1.3.0-beta.8/angular.min.js:101:5)
at J (https://code.angularjs.org/1.3.0-beta.8/angular.min.js:101:5)
at https://code.angularjs.org/1.3.0-beta.8/angular.min.js:102:173
at g.$eval (https://code.angularjs.org/1.3.0-beta.8/angular.min.js:113:138)
at g.$digest (https://code.angularjs.org/1.3.0-beta.8/angular.min.js:110:215)
at g.$apply (https://code.angularjs.org/1.3.0-beta.8/angular.min.js:113:468)
Angular Js 10.016-10.035:
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.
};
}
Vereinfachte Ressource:
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'
}
});
});
Vereinfachte
Richtlinie wo erhalte ich die Fehlermeldung:
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;
});
};
}
};
});
Sobald ich die loadCopies
Methode ausgeführt, die Ausführung der Linie $scope.resource.$copies()
führt den Fehler oben.
Im Chrome Inspector sehe ich, dass der Aufruf meiner API tatsächlich ausgeführt wird. Aber das Versprechen lösen scheint einen Fehler zu werfen ...
Wie kann ich diesen Fehler lösen?
EDIT:
$scope.resource = ContentPage.get({id: $stateParams.id}).$promise
$scope.resource.$save() // Works
$scope.resource.$update() // Works
$scope.resource.$copy() // Works
$scope.resource.$copies() // Does not work!
Angular Ressource versucht, meine erste Ressource mit einer Reihe von Elementen zu überschreiben. Aber die Instanz von Resource hat natürlich keine Methode push
.
Dank Guido. Ich hatte das gleiche Problem. Ich denke, die Dokumente sind ein bisschen verwirrend. Wenn ich es richtig verstehe, können Sie keine Instanzmethode mit isArray: true für eine/single/resource-Instanz aufrufen, da die einzelne Instanz kein Array ist. –
Das ist richtig. Und es macht Sinn, wenn Sie darüber nachdenken: zuerst stellt die Eigenschaft eine Liste von Elementen dar, und plötzlich stellt es ein einzelnes Element dar, das nicht konsistent ist. –