123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- <template>
- <div id="root">
- <div class="todo-container">
- <div class="todo-wrap">
- <MyHeader :addTodo="addTodo"></MyHeader>
- <MyList :todos="todos" :checkTodo="checkTodo" :deleteTodo="deleteTodo"></MyList>
- <MyFooter :todos="todos" :checkAllTodo="checkAllTodo" :cleatAllTodo="cleatAllTodo"></MyFooter>
- </div>
- </div>
- </div>
- </template>
- <script>
- import MyHeader from "./components/MyHeader.vue";
- import MyList from "./components/MyList.vue";
- import MyFooter from "./components/MyFooter.vue";
- export default {
- name: "App",
- components: { MyHeader, MyList, MyFooter },
- data() {
- return {
- todos: JSON.parse(localStorage.getItem('todos')) || []
- };
- },
- methods:{
- //添加一个todo
- addTodo(todoObj){
- // console.log('我是App组件,我收到了数据:',todoObj)
- this.todos.unshift(todoObj)
- },
- //勾选或取消勾选一个todo
- checkTodo(id){
- this.todos.forEach((todo) => {
- if(todo.id === id) todo.done = !todo.done
- })
- },
- //删除一个todo
- deleteTodo(id){
- // const todos = this.todos.filter((todo) => {
- // return todo.id !== id
- // })
- //简化写法
- this.todos = this.todos.filter(todo => todo.id !== id)
- },
- //全选或取消全选
- checkAllTodo(done){
- this.todos.forEach((todo) => {
- todo.done = done
- })
- },
- //清除已经完成的todo
- cleatAllTodo(){
- this.todos = this.todos.filter((todo) => {
- return !todo.done
- })
- }
- },
- // 实现本地存储
- watch:{
- todos:{
- deep:true,
- handler(value){
- localStorage.setItem('todos',JSON.stringify(value))
- }
- }
- }
- };
- </script>
- <style scoped>
- /*base*/
- body {
- background: #fff;
- }
- .btn {
- display: inline-block;
- padding: 4px 12px;
- margin-bottom: 0;
- font-size: 14px;
- line-height: 20px;
- text-align: center;
- vertical-align: middle;
- cursor: pointer;
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2),
- 0 1px 2px rgba(0, 0, 0, 0.05);
- border-radius: 4px;
- }
- .btn-danger {
- color: #fff;
- background-color: #da4f49;
- border: 1px solid #bd362f;
- }
- .btn-danger:hover {
- color: #fff;
- background-color: #bd362f;
- }
- .btn:focus {
- outline: none;
- }
- .todo-container {
- width: 600px;
- margin: 0 auto;
- }
- .todo-container .todo-wrap {
- padding: 10px;
- border: 1px solid #ddd;
- border-radius: 5px;
- }
- </style>
|