Я новичок в AngularJS. Кажется, я не могу заставить $ http работать. У меня есть следующий завод:
app.factory('employeeFactory', function ($http) {
var factory = {};
// get data form controller
var employees = [];
var Url = "../../../Employee/GetEmployees";
// this does not work ----------------------------
$http.get(Url, { params: { term: 'Step' }}).
success(function (response, status, headers, config) {
employees = response.data
}).
error(function (response, status, headers, config) {
alert(error);
});
// this works using JQuery ajax ----------------------------
$.ajax({
url: Url,
data: { term: 'Step' },
dataType: "json",
type: "GET",
error: function (request, status, error) {
alert(error);
},
success: function (response) {
$.each(response.data, function (i, obj) {
employees.push({ EmployeeName: obj.EmployeeName, EmployeeNumber: obj.EmployeeNumber });
});
}
});
factory.getEmployees = function() {
return employees
};
return factory;
});
И следующий контроллер:
app.controller('EmployeeController', function ($scope, employeeFactory) {
$scope.employees = [];
init();
function init() {
$scope.employees = employeeFactory.getEmployees();
}
});
Аякса вызов в заводских работ, но $ HTTPS не (оба на заводе, я просто закомментируйте один или другой во время тестирования). Я посмотрел в Google Chrome Дев инструментов и оба вызова возвращают данные в том же формате, но данные $ НТТР не привязан к HTML:
<div class="container">
<h4>This is view 1</h4>
Type a name to filter: <input type="text" data-ng-model="employeeSearch" />
<ul>
<li data-ng-repeat="employee in employees | filter:employeeSearch | orderBy:'EmployeeName'">{{ employee.EmployeeName }} - {{ employee.EmployeeNumber }}</li>
</ul>
</div>
Вот формат фабричные возвращается для обоих вызовов:
{data: [{EmployeeNumber:123456, EmployeeName:Johnson,Bob},…]
data: [{EmployeeNumber:123456, EmployeeName:Johnson,Bob},…]
0: {EmployeeNumber:123456, EmployeeName:Johnson,Bob}
EmployeeName: "Johnson,Bob"
EmployeeNumber: "123456"
Я не понимаю, почему, когда оба вызова возвращают данные в представление в том же формате, привязка не происходит с помощью метода $ http. Любая помощь приветствуется
Можете ли вы гарантировать вызов AJAX завершен перед вами 'getEmployees'? Я не уверен, почему это будет отличаться между этими двумя, но насколько я вижу, в вашем классе сотрудников нет ничего, что гарантировало бы, что данные были прочитаны в первую очередь. – Rup