У меня есть веб-сервер с данными JSON. Вот как выглядят мои данные
[
{
iduser: 1,
username: "joe",
password: "****"
},
{
iduser: 2,
username: "gina",
password: "****"
}
]
В моем приложении я беру некоторый пользовательский ввод и хочу сравнить его с полем имени пользователя и пароля. Здесь я проверяю данные
.service('LoginService', function ($q, $http) {
return {
loginUser: function (name, pw) {
var deferred = $q.defer();
var promise = deferred.promise;
var user_data = $http.get("http://<my ip address>:<port>/login");
user_data.then(function ($scope, result) {
$scope.user = result.data;
})
for (var x in $scope.user) {
if (name == x.username && pw == x.password) {
deferred.resolve('Welcome ' + name + '!');
} else {
deferred.reject('Wrong credentials.');
}
}
promise.success = function (fn) {
promise.then(fn);
return promise;
}
promise.error = function (fn) {
promise.then(null, fn);
return promise;
}
return promise;
}
}
})
Я все еще изучаю angularJS, и я знаю, что это не безопасный способ проверить данные, которые я просто хочу, чтобы этот цикл работал.
Мое понимание того, что у меня здесь, это то, что $ scope.user содержит мои данные JSON. Затем данные циклически повторяются с циклом for, а имя ввода пользователя сравнивается с именем пользователя для каждой итерации. Но это не так, потому что каждый раз я получаю отказ.
Я почти уверен, что это синтаксическая ошибка, но я не знаю JavaScript или AngularJS достаточно хорошо, чтобы найти проблему. Любая помощь действительно ценится, спасибо.
Редактировать 1
После того, как Нуджабес сказал, что я внес некоторые изменения, так как мне не нужно $ scope.
//previous code the same
user_data.then(function (result) {
var user = result.data;
})
for (var x in user) {
if (name == x.username && pw == x.password) {
//prior code the same
Я не думаю, что var может хранить данные, и поэтому я все еще получаю ошибки. Я думаю, что это должно быть в массиве.
Я думаю, что ваша синтаксическая ошибка заключается в том, что вы опускаете $ scope.
Вы должны ввести $ scope service в эту строку:
.service('LoginService', функция ($ q, $ http, $ scope) {...});
И этот код:
user_data.then(function ($scope, result) {
$scope.user = result.data;
});
Опустите масштаб $.
->
user_data.then(function (result) {
$scope.user = result.data;
});
как это.
Попробуйте.
Надеюсь, это сработает.
(Однако почему вы хотите использовать службу $ scope в своей службе? Я думаю, что определение локального значения и возврат какого-либо метода - лучший выбор, и вы используете службу $ scope в своем "контроллере".)
$ scope.user, который вы пытаетесь пропустить, - это массив? используя (for/in) будет хранить ключ в переменной x, которая в вашем случае указана для каждого элемента (0,1,2,..), для использования в цикле использования массивов (для/из) следующим образом:
for (var value of array)
это даст вам значения...