zoukankan      html  css  js  c++  java
  • vue.js 2.0开发(2)

    如果我们想实时的显示我们todos的长度这个业务逻辑可以这样:

    <h1>{{message}} ({{todos.length}})</h1>

    直接展示todos的length属性,这种可读性不好我们希望以一个变量来展示todos的长度,这就可以使用我们的 computed,js代码:

            new Vue({
                el:'#app',
                data:{
                    message:'hello world',
                    todos:[
                        {id:1,title:"learn vuejs"},
                    ],
                    newTodo:{id:null,title:""}//定义一个obj
                },
                computed:{
                    todoCount(){
                        return this.todos.length;
                    }
                },
                methods:{
                    addTodo(newTodo){//es6
                        this.todos.push(newTodo);//把新的obj添加在数组中,
                        this.newTodo = {id:null,title:""}//初始化newTodo
                    },
                    deleteTodo(index){
                        this.todos.splice(index,1);//删除下标为index的元素
                    }
                }
            });

    页面中:

    <h1>{{message}} ({{todoCount}})</h1>

    这样也是可以的,这样主要用于我们在页面当中展示的一些数据可能需要一些处理之后才可以使用。 v-bind:class 设置我们的class,对于我们改变样式是非常有帮助的,比如我们要判断我们的todo item是否是一个完成的状态。

    首先我们在我们的todos里面的newTodo中添加一个completed:false,然后使用我们的v-bind:class

    <li class="list-group-item" v-for="(todo,index) in todos" v-bind:class="{'completed' : todo.completed}">

    这里就是说如果我们的todo.completed为真就给我们的这个li添加一个class名“completed”,在后面添加一个按钮来控制是否完成。

    <button class="btn btn-warning btn-xs pull-right" v-on:click="toggleCompletion(todo)">Complete</button>

    当然还要把我们的方法写上,功能就是点击把completed变为相反的状态:

    toggleCompletion(todo){
        todo.completed = !todo.completed;
    }

    还可以把点击的时候将按钮本省的样式改变  也是用v-bind:class,用另一种形式来写  也就是我们的三目运算符:

    <button class="btn btn-xs pull-right" v-on:click="toggleCompletion(todo)" v-bind:class="[todo.completed ? 'btn-success' : 'btn-danger']">{{todo.completed ? 'completed' : 'working'}}</button>

    整个的页面:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>vue2.0</title>
        <link rel="stylesheet" type="text/css" href="./css/bootstrap.min.css">
        <style type="text/css">
            .completed{
                color: green;
                font-style: italic;
            }
        </style>
    </head>
    <body>
        <nav class="navbar navbar-default navbar-static-top">
        <div class="container" id="app">
            <div class="row">
                <div class="col-md-8 col-md-offset-2">
                    <div class="panel panel-default">
                        <div class="panel-heading">welcome Vue 2.0</div>
                        <div class="panel-body">
                            <input type="text" name="" v-model="message" class="form-control">
                            <h1>{{message}} ({{todoCount}})</h1>
                            <ul class="list-group">
                                <li class="list-group-item" v-for="(todo,index) in todos" v-bind:class="{'completed' : todo.completed}">
                                    {{todo.title}} 
                                    <button class="btn btn-warning btn-xs pull-right" v-on:click="deleteTodo(index)">Delete</button>
                                    <button class="btn btn-xs pull-right" v-on:click="toggleCompletion(todo)" v-bind:class="[todo.completed ? 'btn-success' : 'btn-danger']">{{todo.completed ? 'completed' : 'working'}}</button>
                                </li>
                            </ul>
                            <form v-on:submit.prevent="addTodo(newTodo)">
                                <div class="form-group">
                                    <input type="text" name="" class="form-gcontrol" placeholder="add a new todo" v-model="newTodo.title">
                                </div>
                                <div class="from-group">
                                    <button class="btn btn-success" type="submit">add todo</button>
                                </div>
                            </form>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <script type="text/javascript" src="js/vue.js"></script>
        <script type="text/javascript">
            new Vue({
                el:'#app',
                data:{
                    message:'hello world',
                    todos:[
                        {id:1,title:"learn vuejs",completed:false},
                    ],
                    newTodo:{id:null,title:"",completed:false}//定义一个obj
                },
                computed:{
                    todoCount(){
                        return this.todos.length;
                    }
                },
                methods:{
                    addTodo(newTodo){//es6
                        this.todos.push(newTodo);//把新的obj添加在数组中,
                        this.newTodo = {id:null,title:"",completed:false}//初始化newTodo
                    },
                    deleteTodo(index){
                        this.todos.splice(index,1);//删除下标为index的元素
                    },
                    toggleCompletion(todo){
                        todo.completed = !todo.completed;
                    }
                }
            });
        </script>
    </body>
    </html>
  • 相关阅读:
    this.get_element .style为空或不是对象
    在server2008R2的IIS7中调试asp程序遇到的错误
    Server.Transfer 在两个窗体之间传递参数用法
    页面事务处理 ContextUtil.SetComplete(); 没有 MTS 对象上下文
    VS2008切换设计视图卡死 停止响应
    javascript对象小结
    [JavaScript] 最低公用标准的浏览器文档对象层次
    Linq 此提供程序只支持对返回实体或投影(包含所有标识列)的有序查询使用 问题的解决
    [Design] Factory Pattern
    [Database] SqlServer: Linq to Sql THE DATACONTEXT Change Processing
  • 原文地址:https://www.cnblogs.com/longsiyuan/p/6098341.html
Copyright © 2011-2022 走看看