zoukankan      html  css  js  c++  java
  • MV*模型及部分vue

    vue是什么?

    Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架。与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用。 

    为什么用VUE?

    1.性能更好

    虚拟了dom的操作,操作dom是非常耗费性能的一件事情 jquery就是专门操作dom的
    操作dom会导致重绘和重排
    2.视图、数据分离

    Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定组合的视图组件

    3.兼容性较好

    Vue.js 不支持 IE8 及其以下版本,因为 Vue.js 使用了 IE8 不能实现的 ECMAScript 5 特性。 Vue.js 支持所有兼容 ECMAScript 5 的浏览器。

    4.其便捷性及易用程度都很好

    vue是一个渐进式的框架,vue当成一个插件,库,框架 完整的应用 来使用都是OK的

     MVVM是什么?

    MVVM是Model-View-ViewModel的简写, 一种新型架构框架。

    View一般就是我们平常说的HTML文本的Js模板,里面可以嵌入一些js模板的代码;
    ViewModule层里面就是我们对于这个视图区域的一切js可视业务逻辑,举个例子,比如图片走马灯特效,比如表单按钮点击提交,这些自定义事件的注册和处理逻辑都写在ViewModule里面;Model就是对于纯数据的处理,比如增删改查,与后台CGI做交互;

    MVVM是将“数据模型数据双向绑定”的思想作为核心,因此在View和Model之间没有联系,通过ViewModel进行交互,而且Model和ViewModel之间的交互是双向的,因此视图的数据的变化会同时修改数据源,而数据源数据的变化也会立即反应到View上。

     MVVM原理?

     vue采用数据劫持配合订阅者和发布者模式的方式 ,

    通过   Object.defineProperty 的setter 和  getter  对数据进行劫持 , 

    在数据变化时, 发布消息给依赖器 Dep(订阅者),  去通知观察者Watcher  做出对应的回调函数 , 进行视图更新

    MVVM 作为绑定入口 , 整合Observer , Compile 和Watcher  三者 , Observer来监听model数据变化 , 

    Compile来解析编译模板指令 , 最终利用Watcher 搭建起 Compile , Observer , Watcher 之间的通信桥梁 , 

    达到数据 变化=>  视图更新 /; 视图交互变化 => 数据model变更的双向绑定效果   

    VUE基本用法

    例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    </head>
    <body>
        <div id="app">  
            <!-- 插值表达式用 {{}} -->
            <!-- 使用数据的时候,需要先放在data中,数据要先存入,才能实现数据绑定 -->
            {{ name }}
            <!-- 原始数据的值可以直接发生改变 -->
    
            <!-- 数组 -->
            <!-- 通过索引的方式改变数组,不能渲染到视图 -->
            <!-- 通过length属性修改也是不能渲染到视图 -->
            <!-- 可以通过数组的push,pop,shift,unshift,sort,reverse,splice这些操作数组可以渲染 -->
            {{arr}}
        
    
            <!-- 对象 -->
            {{obj}}
            <!-- 可以通过对象打点的形式修改,可以渲染视图 -->
            <!-- 对象打点的形式增加属性,不能渲染视图 -->
            <!-- 对象重新赋值(更改地址)以后可以渲染视图,可以使用ES6中的...运算符 -->
            <!-- vm.$set(vm.obj,'abc',2000)  增加属性,渲染视图 -->
    
            <!-- vm.$el()  指代被渲染的dom元素 -->
            <!-- vm.$nextTick(function(){})  最后一次渲染完成以后执行的函数 -->
            <!-- vm.$mount()   可以取代vue实例中的el属性,渲染的dom元素 -->
        </div>
        <script>
            const vm = new Vue({
                // el : "#app",
                data : {
                    name : "psh",
                    arr : [1,2,3],
                    obj : {
                        a : 10,
                        b : 20
                    }
    
                }
            })
            vm.$mount("#app");
            console.log(vm.$el.innerText);
            vm.name = "yinlaoshi";
            console.log(vm.$el.innerText);
            vm.name = "wanglaoshi"
            vm.$nextTick(() => {
                console.log(vm.$el.innerText);
            })
        </script>
    </body>
    </html>

    vue-指令

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>指令</title>
    	<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    	<style>
    		[v-cloak] {
    			display: none;
    		}
    	</style>
    </head>
    <body>
    	<div id="app">
    		<!-- 1.v-pre 跳过该元素和它的子元素的渲染过程,直接显示内容 -->
    		<div v-pre>
    			{{ name }}
    			<div>{{ name }}</div>
    		</div>
    
    		<!-- 2. v-cloak 可以配合着css的使用,让第一次加载的时候不显示(隐藏未编译的{{}}标签)  -->
    		<div>{{ name }}</div>
    
    		<!-- 3. v-once 只会去进行一次渲染,随后的重新渲染,当数据改变时,这里的数据不会改变,元素/组件及所有的子节点全部都会认为是静态的,忽略并跳过,进行了vue的内部的缓存,所有的值全都是从缓存中拿过来  -->
    		<div v-once>{{name}}</div>
    
    		<!-- 4. v-html     innerHTML     用到的比较少,XSS攻击   和插值表达式的区别,v-html是把标签里面的内容全部替换 -->
    		<div v-html="dom">今天天气很好</div>
    		<div>{{ dom }}今天天气很好</div>
    
    		<!-- 5. v-text     相当于innerText -->
    
    		<!-- 6. v-if 判断元素是否存在 -->
    		<!-- 7. v-else  -->
    		<!-- 8. v-else-if -->
    		<!-- <div v-if="flag">hello</div> -->
    		<!-- template是可以减少渲染次数的 -->
    		<template v-if="!flag">     
    			<p>hello</p>
    			<span>world</span>
    		</template>
    		<!-- <div>---</div> -->
    		<template v-else>     
    			<p>hello1</p>
    			<span>world2</span>
    		</template>
    
    		<!-- 9.v-show -->
    		<div v-show="!flag">hello world</div>
    		<template v-show="!flag">
    			<div>hello world</div>
    		</template>

    <button @click="flag=!flag">点击我</button> <!-- v-if和v-show的区别 1.v-if是直接移出dom节点,v-show是通过控制display属性 2.v-if支持template标签 v-show不支持template标签 --> </div> <script> const vm = new Vue({ el : "#app", data : { name : "wxy", age : 18, dom : "<h1>hello world</h1>", flag : true } }) setInterval( () => { vm.flag = !vm.flag; },500) </script> </body> </html>

      

    vue-指令补充

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>指令</title>
        <script src="public/vue/dist/vue.min.js"></script>
    </head>
    <body>
        <div id="example">
            <!-- 循环 -->
            <ul>
                <li v-for="tmp in list">
                    {{tmp}}
                </li>
            </ul>
            <ul>
                <li v-for="(value,key) in list">
                    {{"key is " + key + " value is " + value}}
                </li>
            </ul>
    
            <!-- 选择/判断 -->
            <button v-if="hasMore">加载更多</button>     <!-- 为true的时候显示,为false的时候隐藏 -->
            <p v-if="!hasMore">对不起,没有更多数据可以加载了</p>
    
    
            <!-- 判断分支结构 -->
            <p v-if = "answer == 0">答案是0</p>
            <p v-else-if = "answer == 1">答案是1</p>
            <p v-else-if = "answer == 2">答案是2</p>
    
    
            <!-- v-text v-html v-show -->
            <p v-text = "myHtml">this is a container</p>
            <p v-html = "myHtml">this is a container</p>
            <p v-show = "hasMore">this is a container</p>
    
    
            <!-- 将urlName的内容绑定到a的href中 -->
            <a v-bind:href = "urlName">走,去百度</a>      <!-- 相似的还有img中的src -->
            <a :href = "urlName">走,去百度</a>
    
            <!-- 按钮绑定处理函数 -->
            <button v-on:click = "clickMe">点我试试</button>
            <button @click = "clickMe()">再点我试试</button>
    
    
            <input type="text" @input = 'inpchange'>
        </div>
        <script>
            new Vue({
                el : '#example',
                data : {
                    list : [100,200,300],
                    hasMore : false,
                    answer : 2,
                    myHtml : '<h1>这是一个被替换的文本</h1>',
                    urlName : 'http://www.baidu.com'
                },
                methods : {
                    clickMe : function(){
                        console.log('叫你点你就点呀');
                    },
                    inpchange : function(){
                        console.log(event);
                        console.log(event.target.value);
                    }
                }
            })
    
        </script>
    </body>
    </html>
  • 相关阅读:
    flex datagrid进行删除或增加操作后自动刷新
    java 一个很简单的applet
    转:35岁前必成功的12级跳(男女通用)
    flex DisplayObject UIComponent的区别
    flex flash.utils.Dictionary和Object
    java 正则表达式进行剔除字符
    Flex 元数据标签使用
    使用TableAdapter的Update方法使用注意事项
    android中捕捉menu按键的点击事件
    Repeater 嵌套repeater输出不规则列表
  • 原文地址:https://www.cnblogs.com/wxyblog/p/11440288.html
Copyright © 2011-2022 走看看