Vue.js 创建一个 CNODE 社区(3)

Vue 中的内置指令 demo

通过 demo 了解 Vue 中一些常用的内置指令。

涉及到 v-cloack / v-once / 条件循环指令(v-if / v-else-if / v-else) / v-show / 列表遍历渲染 (v-for) / 数组更新、过滤排序 / 方法和事件 (修饰符) 等...

以下是全部的 demo:

JSbin


v-cloak

作用:解决初始化慢导致页面闪动的最佳实践(初始化慢时会显示未渲染好的页面,而 v-cloak 则让没有渲染好的部分隐藏起来,渲染好之后再去掉 v-cloak,让页面正常显示)

常与 display:none 搭配

<style>
    [v-cloak]{
        display:none;
    }
</style>
<div v-cloak>{{ msg }}</div>

v-once

作用:定义它的元素和组件只渲染一次

<div v-once>{{ msg }}</div>

v--if / v--else-if / v--else

条件循环指令:

<div v-if=‘isActive‘>{{ msg }}</div>
<div v-else-if=‘6>3‘>{{ oncedata }}</div>
<div v-else>如果前面两个都是 false,那就显示这个</div>
<button @click=‘changeMsg‘>点我切换</button>

JS:

data:{
    msg:‘this‘,
    oncedata:‘is‘,
    isActive:true
},
methods:{
    changeMsg:function(){
        this.isActive = !this.isActive
    }
}

v-if的弊端 :

Vue 在渲染元素时 ,出于效率考虑,会尽可能地复用已有的元素而非重新渲染, 因

此会出现乌龙

只会渲染变化的元素,也就是说,input元素被复用了

解决方法:提供key值可以来决定是否复用该元素

<div v-if=‘type==="name"‘>
    用户名 :<input type="text" placeholder="Username" key=‘username‘>
</div>
<div v-else>
    密码 :<input type="text" placeholder="Password" key=‘password‘>
</div>
    <button @click=‘changeInput‘>点击切换输入栏</button>

JS:

data:{
    type:‘name‘
},
methods:{
    changeInput:function(){
        this.type = (this.type===‘name‘?‘password‘:‘name‘)
    }
}

v-show

作用:控制元素是否显示

<div v-show=‘isActive‘>{{ msg }}</div>
data:{
    isActive:true
}

v-show 和 v-if 的区别

v-show 和 v-if 的作用同样是控制元素的显示,但是:

v-if 是将元素给移除,即 DOM 树中并不会渲染这个元素

v-show 是将元素给隐藏,即 DOM 树中渲染了这个元素,只是改变了 css 的 display 的属性

v-for

列表渲染指令

  • 遍历多个对象
<ul>
    <li v-for=‘item in objs‘>{{ item.name}}</li>
</ul>
data:{
    objs:[
        {name:‘Li‘},
        {name:‘Wang‘},
        {name:‘Chen‘}
    ]
}

添加索引:

<ul>
    <li v-for=‘(item,index) in objs‘>{{index}}-{{ item.name}}</li>
</ul>
  • 遍历对象属性

直接打印属性的值:

<ul>
    <li v-for=‘value in obj‘>{{ value }}</li>
</ul>
data:{
    obj:{
        name:‘zhangsan‘,
        age:23,
        gender:‘male‘
    }
}

添加键和索引:

<ul>
    <li v-for=‘(value,key,index) in obj‘>{{ index }}-{{ key }}-{{ value }}</li>
</ul>

数组更新、过滤和排序

<ul>
    <li v-for=‘value in arr‘>{{ value }}</li>
</ul>
data:{
    arr:[213,345,3465,67,457,6,7,687,]
}
  • push() 在末尾添加元素
methods:{
    arrpush:function(){
        this.arr.push(2334)
    }
}
  • pop() 将数组的最后一个元素移除
methods:{
    arrpop:function(){
        this.arr.pop()
    }
}
  • shift() 删除数组的第一个元素
methods:{
    arrshift:function(){
        this.arr.shift()
    }
}
  • unshift():在数组的第一个元素位置添加一个元素
methods:{
    arrunshift:function(){
        this.arr.unshift(234234)
    }
}
  • splice() :可以添加或者删除函数—返回删除的元素

这个方法接受三个参数:

第一个参数 表示开始操作的位置

第二个参数表示:要操作的长度

第三个为可选参数:

methods:{
    arrsplice:function(){
        this.arr.splice(1,1,2)
    }
}
// 操作数组的下标为 1 的数组成员之后的 1 个数组成员,把他的数值变为 2
  • sort() :排序
methods:{
    arrsort:function(){
        this.arr.sort(function(a,b){
            return a > b
        })
    }
}
// 数组成员由大到小排列
  • reverse()

数组翻转

methods:{
    arrreverse:function(){
        this.arr.reverse()
    }
}

注意

两个数组变动vue检测不到:

  1. 改变数组的指定项
  2. 改变数组长度

解决方法:

set :

改变指定项: Vue.set(app.arr,1,”car”)

splice :

改变数组长度: app.arr.splice(1)


方法和事件

基本用法:

记得:如果方法中带有参数,但是你没有加括号,默认传原生事件对象event

data:{
    cout:0
},
methods:{
    handle:function(cout){
        count = count || 1
        this.cout = this.cout + count
    }
}

html:

<button @click=‘handle(4)‘>点击 +4</button>

修饰符:

多用于事件中:

  • stop 阻止事件向上冒泡

不然他会执行完点击按钮的事件后,继续执行父元素的事件

正确做法:添加修饰符 stop:

<div @click=‘divClick‘ style=‘background-color:red;width:100px;height:100px‘>
    <button @click.stop=‘buttonClick‘>点击就送</button>
</div>
  • prevent 提交事件并且不重载页面

当我们页面中有表单,点击表单提交按钮 submit 时,要阻止页面重载:

<form action=‘‘ @submit.prevent=‘handle‘>
    <button type=‘submit‘>提交表单</button>
</form>
methods:function(){
    handle:function(){
        alert(‘不需重载页面‘)
    }
}
  • self 只是作用在元素本身而非子元素的时候调用
<div @click.self=‘divClick‘ style=‘background-color:red;width:100px;height:100px‘>
    <button @click.stop=‘buttonClick‘>点击就送</button>
</div>
  • once 只执行一次的方法
<div @click.once=‘changeNum‘>{{ num }}</div>
data:{
    num:0
}
methods:{
    changeNum:function(){
        this.num = this.num + 1
    }
}

还可以使用 enter 等方法监听键盘事件:

<div @enter=‘xxx()‘>{{ num }}</div>

关于 Vue 的一些常用内置指令就整理到这里了,等接触到新的再添加~。

原文地址:https://www.cnblogs.com/No-harm/p/9733454.html

时间: 2024-08-02 20:12:14

Vue.js 创建一个 CNODE 社区(3)的相关文章

Vue.js 创建一个 CNODE 社区(2)

还是继续入门 demo 这篇博文应该有点长,因为觉得了解了 computed 之后,应该还会继续学下去,所以这里会包含 computed 和 v-bind 的相关学习内容. computed 什么是计算属性 所有的计算属性都以函数的形式写在 Vue 实例内的computed 选项内,最终返回计算后的结果. 为什么使用计算属性以及如何使用 逻辑过长,会变的臃肿,难以维护. 使用计算属性可以完成各种复杂的逻辑,包括运算.函数调用等,只要最终返回一个结果即可. 如计算一个购物车总价: 计算属性还可以依

Vue.js 创建一个 CNODE 社区(6)

render 关于 render 的更详细的内容可以查看 Vue 官方文档 Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML.然而在一些场景中,你真的需要 JavaScript 的完全编程的能力,这时你可以用 render 函数,它比 template 更接近编译器. 我们先设想一下这个场景: 使用 v-bind 和 slot ,实现组件切换的功能.通过监听父组件按钮的事件,改变父组件 level 的值,然后把新的值通过 props 传递给了子组件:然后进行 v-if 判

如何用Express.js &amp; Vue.js 创建一个用比特币支付的在线商店!

#  如何用Express.js & Vue.js 创建一个用比特币支付的在线商店! 如果你想创建一个在线商店,并用比特币等加密货币来支付,那么这里提供了一个很好的解决方案.Express.js是一个轻量级 MVC架构的Web开发框架,适用于Web服务器端开发.Vue.js是一个渐进式的前端开发框架,你可以自由选择需要的模块集成了你的项目中.Mixin Payment是一个开源的,基于Mixin Network开发的加密货币支付方案. ## 准备工作: 先安装以下依赖包!- Go lang  1

Vue.js 创建多人共享博客

多人共享博客 上一个项目:仿 CNODE 社区 刚完成,感觉有点意犹未尽,对于 登录 这一块老师并没有展开,我先是用了 localStorage 自己瞎搞,跑通之后想了下,vuex 不是专门做全局状态管理的么?那么用 vuex 做登录是最合适不过的呀.于是又搜了些别人用 vuex 做登录状态管理的案例,算是搞明白了. 现在选择了若愚老师的这个项目,主要是巩固一下对 vue 的认识,同时对 vuex 做个更详细的了解. 本项目做一款多人共享博客,包含首页.用户文章列表.登录.注册.个人管理.编辑.

基于vue的nuxt框架cnode社区服务端渲染

nuxt-cnode 基于vue的nuxt框架仿的cnode社区服务端渲染,主要是为了seo优化以及首屏加载速度 线上地址 http://nuxt-cnode.foreversnsd.cngithub地址 https://github.com/Kim09AI/nu... 技术栈 vue vue-router vuex nuxt axios simplemde ES6/7 stylus 目录结构 ├─npm-shrinkwrap.json ├─nuxt.config.js # nuxt配置文件 ├

使用vue.js仿一个链家

Vue全家桶+localstorage+socket.io简单仿一个链家 在线预览地址首先上项目和预览地址 https://luxroid.com/lianjia/#/Github地址 https://github.com/mixihome/lianjia 注意 如果要在本地运行安装完依赖之后如果报错请手动使用淘宝镜像安装node-sass和sass-loader 确保可以运行建议使用F12移动端模式预览???? 使用到的技能点Vue.js : 前端页面展示Vuex : 全局状态通信axios

vue.js 创建组件 子父通信 父子通信 非父子通信

1.创建组件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>创建组件</title> <script src="https://unpkg.com/vue/dist/vue.js"></script> </head> <body> &l

关于vue如何创建一个自定义组件(这是项目中经常得用的)

1. 首先作大米饭我们得有米吧 要不 巧妇难为无米之炊啊  因此先买好我们自己的大米也就是创建组件文件,这里我假设要创建一个自己loading效果组件 那么我们就先创建 loading.vue 里面的代码根据vue template相关规则写就可以 这里就不在赘述了 我只写一个最最简单的例子 2.ok了 米就这么愉快的买好了 那么有了米我们现在只需要把他放在锅里!那么这个锅是谁呢!好吧我们自己来背这个锅,我们创建一个相关的.js文件 通常组件都是一个功能自己一个文件夹那么每个组件都应该有自己独立

【vue】创建一个vue前端项目,编译,发布

[一]mac检查是否安装node.js nvm --version =>0.33.9 node -v =>v10.7.0 [二]安装vue-cli cnpm install --global vue-cli [三]创建一个vue项目.基于 # 创建一个基于 webpack 模板的新项目 $ vue init webpack my-project # 这里需要进行一些配置,默认回车即可 原文地址:https://www.cnblogs.com/shangxiaofei/p/9429512.htm