Ошибка AngularJS: fnPtr не является функцией
Я пытаюсь написать образец AngularJS и SpringMVC. Методы spring отлично работают, но у меня проблема с объявлением функции в моем контроллере сайта. Мое приложение должно вернуть слово из ввода текста, но когда я нажимаю кнопку, у меня есть эта ошибка:
[13:23:58.900] "Error: fnPtr is not a function
parser/_functionCall/<@http://localhost:8080/example/resources/js/Angular/angular.js:6542
ngEventDirectives[directiveName]</</</<@http://localhost:8080/example/resources/js/Angular/angular.js:13256
[email protected]://localhost:8080/example/resources/js/Angular/angular.js:8218
[email protected]://localhost:8080/example/resources/js/Angular/angular.js:8298
ngEventDirectives[directiveName]</</<@http://localhost:8080/example/resources/js/Angular/angular.js:13255
createEventHandler/eventHandler/<@http://localhost:8080/example/resources/js/Angular/angular.js:2095
[email protected]://localhost:8080/example/resources/js/Angular/angular.js:130
createEventHandler/[email protected]://localhost:8080/example/resources/js/Angular/angular.js:2094
"
Это мой index.html:
<!DOCTYPE html>
<html lang="en" ng-app="Apken">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="resources/js/Angular/angular.js"></script>
<script src="resources/js/controler.js"></script>
</head>
<body ng-controller="theNamer">
<div class="input-append">
<input style="width:358px;" class="span2" type="text" ng-model="myName" required min="1" />
<button class="btn btn-primary" ng-disabled="!myName" ng-click="send()">Click!</button>
</div>
<ul>
<li ng-repeat="name in names">{{name}}</li>
</ul>
</body>
</html>
И controler.js:
function theNamer ($scope,$http){
$scope.myName='aa';
$scope.fetchList=new function()
{
$http.get('ca/list.json').success(function(thList){
$scope.names = thList;
});
}
$scope.send=new function()
{
$http.post('ca/set/3').success(function(){
$scope.fetchList;
});
}
$scope.fetchList;
}
var Apken = angular.module('Apken',[]);
Apken.controller('theNamer', theNamer);
Я заметил, это должна быть какая-то проблема с объявлением функции в значении ng-click. На начальном этапе запуска controler.js отлично работает, но он падает, когда я нажимаю кнопку.
Ответы
Ответ 1
Я проверил ваш код. Используя AngularJS 1.0.7, ошибка исчезает при замене
$scope.send = new function() {
с
$scope.send = function () {
и то же самое относится к fetchList
.
Я предполагаю, что вы смешали два синтаксиса function(*args*) { *body* }
и new Function(*args*, *body*)
. Проверьте MDN: Function.
Вы также должны изменить свой код, чтобы правильно вызвать ваш fetchList
:
function theNamer($scope, $http) {
$scope.myName = 'aa';
$scope.fetchList = function() {
$http.get('ca/list.json').success(function(thList) {
$scope.names = thList;
});
};
$scope.send = function() {
$http.post('ca/set/3').success(function() {
$scope.fetchList();
});
};
$scope.fetchList();
}
Ответ 2
Просто хотел добавить для любого, кто принимает эту ошибку, это также можно увидеть, если вы, как и я, сделаете ошибку n00b при создании переменной с тем же именем, что и функция (вызываемая функция из ng-click:
$scope.addTask = {};
$scope.addTask = function() {};