zoukankan      html  css  js  c++  java
  • 2Vue之MVVM模式

     模式

    传统的mvp模式:moudel(数据)、view(视图)、presenter(控制器,业务逻辑)。

    控制器调用数据层,改变试图层,是个中转站,大部分代码集中在这一层,有大量dom操作。

    mvvm模式:model层,view层,vm层

     ViewModel取代presenter,使数据和Dom建立了联系,不用我们编写dom操作代码了。我们主要在面向数据编程,所有东西都是响应式的。

     组件化

    全局组件,使用

    Vue.component():内部实例化一个组件
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="vue.js"></script>
        <title>Document</title>
    </head>
    <body>
        <div id="app">
            <!-- v-model与数据进行双向绑定,当input中的值发生变化的时候,Vue实例中的数据也会发生变化,当Vue数据发生变化的时候,input框中的值也会发生变化 -->
            <input type="text" v-model="inputValue" />
            <button v-on:click="handleBtnClick">提交</button>
            <ul>
                <!-- v-for是一个模板指令,帮助我们去循环数据 -->
                <!-- <li v-for="item in list">{{item}}</li> -->
                <todo-item v-bind:content="item" v-for="item in list"></todo-item>
            </ul>
        </div>
        
    </body>
    <script>
        Vue.component("TodoItem",{
            props:['content'],
            template:"<li>{{this.content}}</li>"
        })
        var obj={
            list:[],
            inputValue:""
        }
    
        var app=new Vue({
            el:"#app",//接管id=app里面的内容,el限制了vue接管的内容
            data:obj,
            methods:{//方法定义在methods中
                handleBtnClick:function(){
                    this.list.push(this.inputValue)
                    this.inputValue="";
                }
            }
        });
    
        
    </script>
    </html>

     局部组件,需要在new Vue中注册,注意要写在new Vue之前,不然会找不到。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="vue.js"></script>
        <title>Document</title>
    </head>
    <body>
        <div id="app">
            <!-- v-model与数据进行双向绑定,当input中的值发生变化的时候,Vue实例中的数据也会发生变化,当Vue数据发生变化的时候,input框中的值也会发生变化 -->
            <input type="text" v-model="inputValue" />
            <button v-on:click="handleBtnClick">提交</button>
            <ul>
                <!-- v-for是一个模板指令,帮助我们去循环数据 -->
                <!-- <li v-for="item in list">{{item}}</li> -->
                <todo-item v-bind:content="item" :index="index" v-for="(item,index) in list" @delete="handleDeleteItem"></todo-item>
                <!-- @delete监听 -->
                <!-- :是v-bind:的简写 -->
            </ul>
        </div>
        
    </body>
    <script>
        //全局组件
        // Vue.component("TodoItem",{
        //     props:['content'],
        //     template:"<li>{{this.content}}</li>"
        // })
        var obj={
            list:[],
            inputValue:""
        }
    
        //局部组件,要在Vue实例化之前写,子组件
        var TodoItem={
            props:["content","index"],
            template:"<li @click='handleItemClick'>{{this.content}}</li>",// @是v-on的简写
            methods:{
                handleItemClick:function(){
                    // alert(this.index);
                    this.$emit('delete',this.index);
                }
            }
        }
    
        var app=new Vue({
            el:"#app",//接管id=app里面的内容,el限制了vue接管的内容
            components:{ //局部组件需要注册到Vue实例中
                TodoItem:TodoItem
            },
            data:obj,
            methods:{//方法定义在methods中
                handleBtnClick:function(){
                    this.list.push(this.inputValue)
                    this.inputValue="";
                },
                handleDeleteItem:function(index){
                    this.list.splice(index,1);
                }
              
            }
        });
    
        
    </script>
    </html>
    •  @是v-on:的简写
    • :是v-bind的简写
    • v-model实现双向绑定

  • 相关阅读:
    UIGestureRecognizer在多层视图中的触发问题
    mysql出现Waiting for table metadata lock的原因及解决方案
    SQL逆向工程
    自己总结的ruby on rails 查询方法
    hdu 1536 SG函数模板题
    spring 源码分析之BeanPostProcessor
    spring bean生命周期管理--转
    java.lang.Long cannot be cast to java.lang.Integer解决办法
    Mybatis之Oracle增删查改示例--转
    Anti-If: The missing patterns--转
  • 原文地址:https://www.cnblogs.com/ellen-mylife/p/14008404.html
Copyright © 2011-2022 走看看