我写了一些待办事项列表应用程序,了解如何成为更专家。AngularJs/Javascript,复制对象是很好的做法?
什么,我试着去理解:
我的问题是当任务用户点击编辑,因为它通过引用传递的,所以如果用户编辑任务时,它会直接更改任务的对象。 (我在这里附上我的代码)。
我的问题:
1)在我的代码我写,每次修复它,通过克隆对象的一种方式。 很好的做法?如果没有你如何推荐我解决它?
2)因为我不想我的代码只工作,我想成为更专家。 如果您认为我对此代码的思考和计划不好?你如何编写这个应用程序? (我这里只讲功能,添加,编辑,任务列表)
感谢帮助:)
链接plunker:https://plnkr.co/edit/CA99iiydbD4TWaGtJZZf?p=preview
代码: HTML
<html ng-app="todos">
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular.min.js"></script>
<script src="app.js"></script>
</head>
<body>
<div ng-controller="main">
<ul>
<li ng-repeat="task in todosBL.tasks" ng-click="editMode.edit(task)">{{ task.content}}</li>
</ul>
<input type="text" ng-model="task">
<input type="button" value="add task" ng-click="add(task)">
<!--//for edit-->
<div>
<input type="text" ng-model="editMode.task.content">
<input type="button" value="save task" ng-click="editMode.save(editMode.task)">
</div>
</div>
</body>
</html>
SCRIPT :
(function() {
var Task = (function() {
var counter = 0;
return function(content, isDone) {
this.id = counter++;
this.content = content;
this.isDone = isDone || false;
}
}());
var app = angular.module('todos',[])
.service('todosBL', function() {
this.tasks = [];
this.add = function(content) {
this.tasks.push(new Task(content));
}
this.update = function(editedTask) {
var i = this.tasks.findIndex(function(task){
return task.id === editedTask.id
});
this.tasks[i] = editedTask;
}
})
.controller('main', function($scope, todosBL) {
$scope.todosBL = todosBL;
$scope.add = function(task) {
todosBL.add(task);
$scope.task = null;
}
$scope.editMode = {
task: {},
edit: function(task) {
this.task = task;
//BECAUSE I PASS TASK BY REFERNCE WHEN USER EDIT TASK IT CHANGE TASK DIRECTLY ,
// IF I CLONE OBJECT EVERY TIME, IT FIX BY REFERENCE PROBLEM.
// MY QUESTION IF HAVE OTHER WAY TO SLOVE THIS. MABY OTHER WAY TO THINK ABOUT APP LIKE THIS.
// for(key in task) {
// this.task[key] = task[key];
// }
},
save: function(task) {
todosBL.update(task);
this.task = {};
}
};
});
}());
我认为这是更适合http://codereview.stackexchange.com/作为代码的作品,但你想对它的意见。 – leroydev
在我的愚见中,你让你的应用变得复杂。外部功能,工厂这样一个简单的应用程序? –
谢谢你的回答,但肯定它对这个应用程序很复杂。我的问题不是关于这个应用程序。我询问有关思考或计划的代码。 我给这个应用程序例如我的问题。 我试着了解是否有更多专家的方式来编写这个功能 –