Это мой HTML-код. Он показывает одно текстовое поле и две кнопки "go" и "clear completed" при вводе текста в texbox, и после нажатия кнопки "go" он должен быть добавлен в неупорядоченный список. Но проблема заключается в том, что показано на изображении [! [введите описание изображения здесь] [1]] [1] Я вводя текст как "hhh", и что-то другое непредвиденный текст поступает в неупорядоченный список
<html lang="en-US" ng-app="ToDo">
<style>
.done{ text-decoration: line-through;color: #ccc;}
</style>
<body>
<div ng-controller="todoController">
<form name="frm" ng-submit="addTodo()">
<input type="text" name="newtodo" ng-model="newTodo" required>
<button ng-disabled="frm.$invalid">Go</button>
</form>
<button ng-click="clearcompleted()">Clear Completed</button>
<ul>
<li ng-repeat="todo in todos track by $index">
<input type="checkbox" ng-model="todo.done"/>{{$index + 1}}
<span ng-class="{'done':todo.done}">{{todo.title}}</span>
</li>
</ul>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/annyang/2.0.0/annyang.min.js"></script>
<script>
var app = angular.module('ToDo', []);
app.controller('todoController', function($scope){
$scope.todos = JSON.parse(localStorage.getItem('todos')) || []
$scope.addTodo = function(){
$scope.todos.push({'title':$scope.newTodo, 'done':false})
$scope.newTodo = ''
}
$scope.clearcompleted = function(){
$scope.todos = $scope.todos.filter(function(item)){
return !item.done;
}
}
$scope.$watch('todos', function(newValue, oldValue)){
if (newValue != oldValue){
localStorage.setItem('todos', JSON.stringify(newValue))
}
}, true)
})
</script>
</body>
</html>
[1]: http://i.stack.imgur.com/TRzbZ.png
Я думаю, что синтаксис неверен в 2-х местах. Попробуйте ниже
<html lang="en-US" ng-app="ToDo">
<style>
.done{ text-decoration: line-through;color: #ccc;}
</style>
<body>
<div ng-controller="todoController">
<form name="frm" ng-submit="addTodo()">
<input type="text" name="newtodo" ng-model="newTodo" required>
<button ng-disabled="frm.$invalid">Go</button>
</form>
<button ng-click="clearcompleted()">Clear Completed</button>
<ul>
<li ng-repeat="todo in todos track by $index">
<input type="checkbox" ng-model="todo.done"/>{{$index + 1}}
<span ng-class="{'done':todo.done}">{{todo.title}}</span>
</li>
</ul>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/annyang/2.0.0/annyang.min.js"></script>
<script>
var app = angular.module('ToDo', []);
app.controller('todoController', function($scope){
$scope.todos = JSON.parse(localStorage.getItem('todos')) || []
$scope.addTodo = function(){
$scope.todos.push({'title':$scope.newTodo, 'done':false});
$scope.newTodo = '';
}
$scope.clearcompleted = function(){
$scope.todos = $scope.todos.filter(function(item){
return !item.done;
})
}
$scope.$watch('todos', function(newValue, oldValue){
if (newValue != oldValue){
localStorage.setItem('todos', JSON.stringify(newValue))
}
}, true)
})
</script>
</body>
</html>
Я изменил ваш код.
var app = angular.module('ToDo', []);
app.controller('todoController', function($scope) {
$scope.todos = JSON.parse(localStorage.getItem('todos')) || []
$scope.addTodo = function() {
$scope.todos.push({
'title': $scope.newTodo,
'done': false
})
$scope.newTodo = ''
}
$scope.clearcompleted = function() {
$scope.todos = $scope.todos.filter(function(item) {
return !item.done;
})
}
$scope.$watch('todos', function(newValue, oldValue) {
if (newValue != oldValue) {
localStorage.setItem('todos', JSON.stringify(newValue))
}
}, true)
})