Почему ошибка: ввод не определен AngularJS

Я пытаюсь сделать запрос AJAX php от угловой JS. Но я не получаю данные, которые я послал по файлу php.

Я получаю эту ошибку:

Ошибка: ввод не определен

Мой источник:

Файл view.html:

<div class="content-panel" >
<div class="content-panel-title">
<h2> Date : {{jalse.contentDate}}</h2>
</div>
<div>
<h4>{{jalse.contentAbstract}}</h4>
<div>
{{jalse.contentText}}
</div>
</div>
</div>

Файл app.js:

 (function () {
var app = angular.module('myApp', ['ngRoute']);

app.config(function ($routeProvider) {
$routeProvider

.when('/', {
controller: 'contentsCtrl',
templateUrl: 'views/contents.php'
})

.when('/jalse/:jalseId', {
controller: 'recordsCtrl',
templateUrl: 'views/jalse.php'
})

.otherwise({redirectTo: '/'});
});

}());

Файл jalseFactory.js:

    (function () {

'use strict';

var jasleFactory = function ($http, $q) {

var factory = {};

factory.getJalse = function () {
var deferred = $q.defer();

$http({method: 'GET', url: 'includes/records.php'}).
success(function (data, status, headers, config) {
deferred.resolve(data);
}).
error(function (data, status, headers, config) {
deferred.reject(data);
});
return deferred.promise;
};
return factory;
};

jasleFactory.$inject = ['$http', '$q'];
angular.module('myApp').factory('jasleFactory', jasleFactory);

}());

Файл recordsCtrl.js:

(function () {
'use strict';

var recordsCtrl = function($scope, $routeParams , jasleFactory) {
var jalseId = $routeParams.jalseId;

$scope.records = jasleFactory.getJalse();

$scope.jalse = null;

function init() {
for (var i = 0, len = $scope.records.length; i < len; i++) {
if ($scope.records[i].contentID == parseInt(jalseId)) {
$scope.jalse = $scope.records[i];
break;
}
}
}

init();

};

recordsCtrl.$inject = ['$scope','$routeParams', 'jasleFactory'];

angular.module('myApp').controller('recordsCtrl', recordsCtrl);

}());

1

Решение

Ваш код создает Ajax, а затем предполагает, что ответ установлен records переменная, так как вы имеете дело с асинхронным вызовом, вы должны вызвать метод, который будет вызывать на $scope.records внутри его успеха.

Фабричный метод

factory.getJalse = function () {
return $http({method: 'GET', url: 'includes/records.php'});
};

контроллер

(function() {
'use strict';
var recordsCtrl = function($scope, $routeParams, jasleFactory) {
var jalseId = $routeParams.jalseId;

jasleFactory.getJalse().success(function(data, status, headers, config) {
$scope.records = data.records;
init(); //this will fix your error.
}).
error(function(error, status, headers, config) {
console.log("error occured " + error)
});
$scope.jalse = null;
function init() {
for (var i = 0, len = $scope.records.length; i < len; i++) {
if ($scope.records[i].contentID == parseInt(jalseId)) {
$scope.jalse = $scope.records[i];
break;
}
}
}
//we will call this as soon as $scope.records gets filled
//init();
};
recordsCtrl.$inject = ['$scope','$routeParams', 'jasleFactory'];

angular.module('myApp').controller('recordsCtrl', recordsCtrl);

}());

Обновить

Ваш json также недействителен, поскольку содержит вредоносное поле,

"contentText": "1\ u0645\ u0637\ u0644\ u0628 < \/p>",
"3":"1\ u0645\ u0637\ u0644\ u0628 < \/p>",

Если вы удалите это два поля, ваш код будет работать как есть

Рабочий планкр

1

Другие решения

Других решений пока нет …