Я сохраняю список из 5 лучших результатов в массиве в localstorage, но когда я пытаюсь показать его в моем HTML, он не появляется.
Я использую функцию GameService.getScores (), чтобы получить массив из локального хранилища, и я ссылаюсь на массив $ scope.scores для заполнения моего списка в HTML.
Я новичок в Angular и Node.js, я не знаю, что делаю не так. Любые идеи?
Вот мой файл контроллера и мой HTML-файл:
var app = angular.module('app', []);
app.controller('GameController', function($scope, GameService)
{
var highScores = GameService.getScores();
$scope.scores = highScores;
$scope.submitEntry = function()
{
if (typeof $scope.name === 'undefined' || typeof $scope.word === 'undefined')
{
return;
}
var entry = {
name: $scope.name,
word: $scope.word
};
var score = GameService.submitEntry(entry);
var userScore = {
name: entry.name,
points: score
};
if (score > 0)
{
if ($scope.scores.length < 5)
{
$scope.scores.push(userScore);
localStorage.setItem("highScores", JSON.stringify($scope.scores));
return;
}
else
{
for (let i = 0; i < $scope.scores.length; i++)
{
if (score > $scope.scores[i].points)
{
$scope.scores.splice(i, 1, userScore);
localStorage.setItem("highScores", JSON.stringify($scope.scores));
return;
}
}
}
}
};
});
app.service('GameService', function($http)
{
this.getScores = function()
{
var hs = [];
if (localStorage.getItem('highScores') != null)
{
hs = localStorage.getItem('highScores');
if (hs)
{
hs = JSON.parse(hs);
}
}
return hs;
};
this.submitEntry = function(entry)
{
var score = 0;
var revStr = "";
var str = entry.word;
var i = str.length;
for(var j=i; j>=0; j--)
{
revStr = revStr + str.charAt(j);
}
if (str == revStr)
{
alert(str + " is Palindrome");
score = str.length;
}
else
{
alert(str + " is not a Palindrome");
}
return score;
};
});<!DOCTYPE html>
<html ng-app = "app">
<head>
<link rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity = "sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin = "anonymous">
</head>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<script src = "ng/app.js"></script>
<body >
<div ng-controller = "GameController" class='container'>
<h1>Palindrome Game</h1>
<h2>Submit a new word!</h2>
<form role='form'>
<div class='form-group'>
<input ng-model = "name" class='form-control' placeholder = "Your name">
<input ng-model = "word" class='form-control' placeholder = "Word">
<button ng-click='submitEntry()' class='btn btn-default'>Submit word</button>
</div>
</form>
<h2>Top Scores</h2>
<ul class='list-group'>
<li ng-repeat = "score in scores | orderBy:'-points'" class='list-group-item'>
<strong>{{score.name}}</strong> {{score.points}} points
</li>
</ul-->
</div>
</body>
</html>Ошибок в консоли нет
распечатайте scores в шаблоне, например {{scores}}
Кажется, работает, вы просто плохо сортируете данные
Спасибо, Зоули, что ты имеешь в виду под сортировкой данных?
Есть большая разница между angular и angularjs. Это две разные структуры. Вы используете angularjs и правильно отметили его, но неправильно назвали его в заголовке и в вопросе.
Почему вы закрываете комментарий (</ul-->), а нигде не открываете?
Просто оставил закрывающий комментарий предыдущей модификации. Спасибо за внимание
Вы должны удалить значение в ng-app = "app". Это только ng-app



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Ваш код действительно работает: https://jsfiddle.net/BPagoaga/8jcuqds7/1/
<!DOCTYPE html>
<html ng-app = "app">
<head>
<link rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity = "sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin = "anonymous">
</head>
<body >
<div ng-controller = "GameController" class='container'>
<h1>Palindrome Game</h1>
<h2>Submit a new word!</h2>
<form role='form'>
<div class='form-group'>
<input ng-model = "name" class='form-control' placeholder = "Your name">
<input ng-model = "word" class='form-control' placeholder = "Word">
<button ng-click='submitEntry()' class='btn btn-default'>Submit word</button>
</div>
</form>
<h2>Top Scores</h2>
<ul class='list-group'>
<li ng-repeat = "score in scores | orderBy:'-points'" class='list-group-item'>
<strong>{{score.name}}</strong> {{score.points}} points
</li>
</ul>
</div>
</body>
</html>
var app = angular.module('app', []);
app.controller('GameController', function($scope, GameService)
{
var highScores = GameService.getScores();
$scope.scores = highScores;
$scope.submitEntry = function()
{
if (typeof $scope.name === 'undefined' || typeof $scope.word === 'undefined')
{
return;
}
var entry = {
name: $scope.name,
word: $scope.word
};
var score = GameService.submitEntry(entry);
var userScore = {
name: entry.name,
points: score
};
if (score > 0)
{
if ($scope.scores.length < 5)
{
$scope.scores.push(userScore);
localStorage.setItem("highScores", JSON.stringify($scope.scores));
return;
}
else
{
for (let i = 0; i < $scope.scores.length; i++)
{
if (score > $scope.scores[i].points)
{
$scope.scores.splice(i, 1, userScore);
localStorage.setItem("highScores", JSON.stringify($scope.scores));
return;
}
}
}
}
};
});
app.service('GameService', function($http)
{
this.getScores = function()
{
var hs = [];
if (localStorage.getItem('highScores') != null)
{
hs = localStorage.getItem('highScores');
if (hs)
{
hs = JSON.parse(hs);
}
}
return hs;
};
this.submitEntry = function(entry)
{
var score = 0;
var revStr = "";
var str = entry.word;
var i = str.length;
for(var j=i; j>=0; j--)
{
revStr = revStr + str.charAt(j);
}
if (str == revStr)
{
alert(str + " is Palindrome");
score = str.length;
}
else
{
alert(str + " is not a Palindrome");
}
return score;
};
});
Я удалил это:
<script src = "ng/app.js"></script>`
но я не уверен, была ли это проблема.
В зависимости от того, как вы тестировали свой код (фрагмент кода в stackoverflow, jsfiddle) и в каком браузере, вы можете столкнуться с некоторыми проблемами с политикой того же происхождения.
В Chrome мне пришлось снять флажок «Блокировать сторонние файлы cookie», чтобы он работал. В firefox он все еще не работает, операция заблокирована, потому что браузер считает ее небезопасной.
Я предлагаю вам попробовать код локально на вашем компьютере, а не в онлайн-песочницах, таких как jsFiddle.
любые ошибки в консоли