vue基础知识(上)

简介: vue基础知识(上)

初识vue

  • M:Model(模型) 对应data的数据
  • V:View(视图) 模板==>页面
  • VM:ViewModel(视图模型) Vue实例对象

搭建vue环境

vue环境的搭建有很多种:

  • 使用cdn
  • 下载javaScript文件,自行托管
  • 使用npm安装
  • 使用官方的cli来构建项目

对于我们初次学习,我们使用自行下载js的方式。

第一个hello world

<body>
    <div id="app">
        {{message}}
    </div>
</body>
<script src="./js/vue2.js"></script>
<script>
    var app = new Vue({
        el: '#app',     // 用于指定当前vue实例为哪个容器使用,值为css选择器字符串
        data: {         // 用于储存数据,数据供el指定的容器使用
            message: 'Hello world!',
        },
    });
</script>

注意

  • 一个vue实例只能接管一个容器
  • 插值语法:{{}} 可以读取到在data的所有属性
  • data中数据发生变化,那么在容器用到的数据会自动更新
  • data的写法,我们通常会写成函数的方式,代码如下:
data(){
    return {
       message: 'Hello world!',
    }
}

Data为啥要写成函数?

Vue 里面data属性之所以不能写成对象的格式,是因为对象是对地址的引用,而不是独立存在的。如果一个.vue 文件有多个子组件共同接收一个变量的话,改变其中一个子组件内此变量的值,会影响其他组件的这个变量的值。如果写成函数的话,那么他们有一个作用域的概念在里面,相互隔阂,不受影响。

基础知识

指令

什么是指令? 在vue中提供一些对于页面+数据的更为方便的操作,这些操作就叫做指令。

比如在HTML页面中这样使用

<div v-xxx=''></div>

在vue中v-xxx就是vue的指令,指令就是以数据去驱动DOM行为的,简化DOM操作。

常用的指令有哪些,及怎么使用这些指令

  • v-text 不可解析html标签
  • v-html 可解析html标签
  • v-if 做元素的插入(append)和移除(remove)操作
  • v-else-if
  • v-else
  • v-show display:none 和display:block的切换
  • v-for 数组 item,index 对象 value,key ,index
<body>
    <div id="app">
        <div v-text='mytext'></div>
        <hr>
        <div v-html='myhtml'></div>
        <hr>
        <button v-if="isButtonIf">v-if 元素插入和移除</button>
        <hr>
        <button v-if="num==1">测试v-if</button>
        <button v-else-if="num==2">测试v-else-if</button>
        <button v-else>测试v-else</button>
        <hr />
        <button v-show="isButtonShow">v-show 元素的显示和隐藏</button>
        <hr />
        v-for 循环数组。这个指令写道哪个标签就循环哪个标签,可以显示数组内容和下标
        <ul>
            <li v-for="(love,index) in lovesArray">
                {{index}}-{{love}}
            </li>
        </ul>
        v-for 循环对象。可以显示对象的key和value
        <ul>
            <li v-for="(attr,key) in myUser">
                {{key}}:{{attr}}
            </li>
        </ul>
        v-for 循环对象数组。可以显示对象的成员value
        <ul>
            <li v-for="(u,index) in userArray">
                {{index}}:{{u.username}}
            </li>
        </ul>
        v-for 循环数字
        <ul>
            <li v-for="num in 10">
                {{num}}
            </li>
        </ul>
    </div>
</body>
<script src="./js/vue2.js"></script>
<script>
    var app = new Vue({
        el: '#app', // 用于指定当前vue实例为哪个容器使用,值为css选择器字符串
        data() {
            return {
                mytext: '<h1>我是v-text</h1>',
                myhtml: '<h1>我是v-html</h1>',
                isButtonIf: true,
                num: 2,
                isButtonShow: false,
                lovesArray: ['吃', '睡', '玩'],
                myUser: {
                    username: 'youyou',
                    age: 18
                },
                userArray: [{
                        username: 'youyou',
                        age: 18
                    },
                    {
                        username: 'feifei',
                        age: 30
                    }
                ]
            }
        }
    });
</script>

双向数据绑定

 vue双向数据流 v-model,只作用于有value属性的元素

<!-- 双向数据绑定是表单元素进行绑定 -->
<input type="text" v-model="person.name">
  • 内存 《》页面
  • 双向数据绑定 页面对于input的value改变,能影响内存中name变量
  • 内存js改变name的值,会影响页面重新渲染最新值

事件绑定

事件绑定v-on:事件名="表达式||函数名" 简写 @事件名="表达式||函数名"

在事件对应的方法中获取到事件对象

  • 不加括号
<button @click="fun1" >点击获取事件对象</button>
fun1(event){
  console.log(event.target);
}
  • 加括号,加括号一般是需要有额外参数的情况。
<button @click="fun2($event,'其他参数')" >点击获取事件对象(带括号)</button>
fun2(evnet, arg){
    console.log(event.target,arg);
}

事件修饰符-阻止冒泡

冒泡发生的情景:子元素和父元素绑定了相同的事件,然后点击了子元素,父元素也触发了该事件

  • 使用原生js阻止冒泡
<div @click="fun3">
    外层div
    <div @click="fun3">里层div</div>
</div>
fun3(event){
    console.log(event.target);
    event.stopPropagation(); // 使用原生js阻止冒泡
},
  • 使用vue事件的修饰符阻止冒泡
<div @click="fun4">
    外层div
    <div @click.stop="fun4">里层div</div>
</div>
fun4(event){
    console.log(event.target);
}


相关文章
|
3天前
|
存储 JavaScript
Vue当前时间与接口返回时间的判断
Vue当前时间与接口返回时间的判断
8 0
|
3天前
|
JavaScript 前端开发
Vue生成Canvas二维码
Vue生成Canvas二维码
8 0
|
3天前
|
JavaScript 前端开发 开发者
new Vue() 发生了什么
new Vue() 发生了什么
10 1
|
1天前
|
JavaScript
vue打印v-model 的值
vue打印v-model 的值
|
1天前
|
JavaScript
vue知识点
vue知识点
4 1
|
2天前
|
JavaScript
Vue实战-组件通信
Vue实战-组件通信
4 0
|
2天前
|
JavaScript
Vue实战-将通用组件注册为全局组件
Vue实战-将通用组件注册为全局组件
5 0
|
2天前
|
JavaScript 前端开发
vue的论坛管理模块-文章评论02
vue的论坛管理模块-文章评论02
|
2天前
|
JavaScript Java
vue的论坛管理模块-文章查看-01
vue的论坛管理模块-文章查看-01
|
2天前
|
JavaScript
vue页面加载时同时请求两个接口
vue页面加载时同时请求两个接口