vue 常见指令 双向绑定原理

1.淘宝镜像

npm 的下载是需要访问国外服务器才可以下载 但是国内访问很慢 所以淘宝集团 自行搭建了一个服务器 这个服务器每隔10分钟就会把npm国外服务器的内容拉去一次 就叫淘宝镜像

要使用需要配置:npm i -g cnpm --registry=https://registry.npm.taobao.org

然后在当下目录cmd,执行命令

获取vue的依赖库 cnpm install --save vue

什么是html标签的属性

扩展标签的功能

属性的语法 必须写在开标签中 属性="属性值"

vue

Vue是什么

vue.js是当今最为主流的MVVM框架

作者:尤雨溪 前Google员工

MVVM

MVVM是一种编程的思想 在这个思想下 更加专注于业务的开发(功能),让我们的开发变得更加简单

M ------ model 模型=数据

V ------ view 视图=界面(写出来用户可以看到的内容)

VM -------viewmodel 视图模型 用来传递模型和关联视图的

Vue优势

vue的开发目的

vue初体验

获取vue的依赖库 npm install --save vue

(在淘宝镜像上获取: cnpm install --save vue)

编写如下内容:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
      <!-- 步骤
    1.下载包
    2.引包 -->
    <script src="../node_modules/vue/dist/vue.min.js"></script>
        
</head>
<body>
  
    
 <!-- M   model 模型=数据
 V   view 视图=界面
 VM   viewmodel 视图模型 用来传递模型和关联视图的 -->
​
 <!--  3.新建v层 -->
 <div id="demodiv">
        {{text}}
        <!-- 双括号里是表达式 -->
 </div>
​
 <script>
    //  4.新建VM层 就是Vue实例
​
    new Vue({
        el:"#demodiv",
        // 5.编写m层
        data:{
            text:"你好呀"
        }
    })
 </script>
</body>
</html>

{{}}是什么?

{{表达式--通过计算返回结果的公式}}

{{}} 大括号赋值法/双大括号/模板语法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../node_modules/vue/dist/vue.min.js"></script>
</head>
<body>
    <div id="demodiv">
        <h1>双大括号赋值法</h1>
        <h1>{{text}}</h1>
        <h1>{{num+2}}</h1>
        <h1>{{bool?"你好呀":"怎么呢"}}</h1>
        <h1>{{arr}}</h1>
        
    </div>
    <script>
        new Vue({
            el:"#demodiv",
            data:{
                text:"字符串",
                num:18,
                bool:false,
                arr:[1111,2222,3333,4444],
                obj:{
                    name:"xixi",
                    age:18
                }
            }
        })
    </script>
    
</body>
</html>

vue渲染数据

vue.js的核心就是数据驱动   vue的数据驱动就是视图的内容是根据模型data数据的改变而改变的

数据驱动的分类

1.声明式渲染 我们只需要告诉程序 想干什么 那么程序就会自动来完成

2.命令式渲染 我们需要一步一步的指挥着程序 程序才会按照我们的指令去执行

指令

在vue中 使用v-开头html特殊属性

指令的作用:在Vue中扩展标签的功能

指令的语法:写在html开标签中且  v-指令="指令值"

v-model

作用:用于 表单元素上 完成数据的双向绑定

语法:v-model="值"

双向绑定

用户可以看见的界面中也就是v层视图层 改变了数据  那么data中的内容也就会改变 视图变模型变

  模型改变了 反之也会让视图发生改变 模型变视图变

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../node_modules/vue/dist/vue.min.js"></script>
</head>
<body>
    <div id="demodiv">
        <h1>v-model</h1>
        <!-- 双向绑定
        用户可以看见的界面中也就是v层(视图层) 改变了数据的  那么data中的内容也就会改变  视图变模型变
        模型改变了  反之也会让视图发生改变  模型变视图变 -->
        <input type="text" v-model="inputval">
        <h1>{{inputval}}</h1>
        <h1>{{inputval}}</h1>
        <h1>{{inputval}}</h1>
        <h1>{{inputval}}</h1>
        <h1>{{inputval}}</h1>
        <h1>{{inputval}}</h1>
        <h1>{{inputval}}</h1>
​
    </div>
    <script>
        new Vue({
            el:"#demodiv",
            data:{
                inputval:""
            }
        })
    </script>    
</body>
</html>

双向绑定的原理

双向绑定是通过 数据劫持发布者订阅者模式来实现的

数据劫持:数据(变量)劫持(拦截)就是当数据改变的时候 我要拦截到这次改变 通知模型或者视图发生改变

通过一个Object.defineProperty()来监听数据,当数据改变的时候他就会被触发 从而通知另外一方(有一个get的方法和set的方法 分别是读取与修改)

发布者订阅者模式:就是一个一对多的关系 ,当发布者改变了 其所有的订阅者也会随之发生改变

v-show

作用:控制dom元素的显示和隐藏

语法:v-show="返回值为布尔值的表达式"  true 显示  false隐藏

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../node_modules/vue/dist/vue.min.js"></script>
</head>
<body>
    <div id="demodiv">
        <h1>v-show</h1>
        <!-- 如果给复选框绑定一个变量,那么这个变量就会随着勾选和取消在true和false中切换 -->
        <input type="checkbox" v-model="bool">{{bool?"显示了":"隐藏了"}}
        <h1 v-show="bool">我是测试显示和隐藏的元素</h1>
​
    </div>
    
    <script>
        new Vue({
            el:"#demodiv",
            data:{
                bool:true
            }
        })
    </script>
</body>
</html>

v-on

作用:就是给dom元素绑定事件的

语法:v-on:去掉on的事件="函数" 简写就是 @

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../node_modules/vue/dist/vue.min.js"></script>
</head>
<body>
    <h1>v-on</h1>
    <!-- 绑定事件用v-on -->
    <div id="demodiv">
        <button v-on:click="fun()">点我绑定事件</button>
        <!-- v-on简写:把v-on:替换成@ -->
        <button @click="fun()">简写写法</button>
    </div>   
    <script>
        new Vue({
            el:"#demodiv",
            data:{
                
            },
            // methods来创建函数
            methods:{
                // 函数名(){
​
                // }
                fun(){
                    console.error("你好啊");
                }
            }
        })
    </script>
    
</body>
</html>

v-for

作用:遍历展示数据

v-for="(v,i) in arr"

语法:v-for"(参数1-----遍历出来的值,参数2-------遍历出来的下标) in 你要遍历的数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../node_modules/vue/dist/vue.min.js"></script>
</head>
<body>
    <div id="demodiv">
        <h1>v-for</h1>
        <ul>
            <li v-for="(v,i) in arr">{{v}}</li>
        </ul>
        <hr>
        <table border="1">
            <tr v-for="(v,i) in obj">
                <td>{i}</td>
                <td> {{v.name}} </td>
                <td> {{v.age}} </td>
​
            </tr>
        </table>
    </div>
    <script>
        new Vue({
            el:"#demodiv",
            data:{
                arr:["ddd","dee","ttt","rvv"],
                obj:[
                    {name:"ccc1",age:10},
                    {name:"ccc2",age:11},
                    {name:"ccc3",age:12},
                    {name:"ccc4",age:13}
                ]
            }
        })
    </script>
</body>
</html>

v-bind(使用中最容易忽略的指令)

作用:就是给html的属性插入变量

语法:v-bind:html标签的属性="变量" 简写 :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../node_modules/vue/dist/vue.min.js"></script>
</head>
<body>
    <div id="demodiv">
        <h1>v-bind</h1>
        <!-- HTML的属性插变量使用v-bind -->
        <a v-bind:href="ahref"> {{atext}} </a>
​
        <!-- 简写 v-bind:替换成 :  -->
        <a :href="ahref"> {{atext}} </a>
    </div>
    <script>
        new Vue({
            el:"#demodiv",
            data:{
                ahref:"http://www.baidu.com",
                atext:"点我去百度"
            }
        })
    </script>
    
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值