## :-: [声明式渲染](https://cn.vuejs.org/v2/guide/#声明式渲染 "声明式渲染")
```
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
<div id="app">{{ demo }}</div>
<script>
new Vue({
el: "#app",
data: { demo: "Hello World ~" }
});
</script>
```
## :-: 笔记
![](https://box.kancloud.cn/8cd27be765097d9631225cb37cede5d4_347x78.png)
```
<!-- {{ test }} -- 差值表达式 -->
<div id="demo" v-if="isShow">{{ test }}{{ " -- " + obj.abc }}</div>
<script>
const oVue = new Vue({
// el -- 需要绑定数据的元素、
el: "div",
data: {
// 数据绑定是通过数据劫持来实现的、
// 数据要先存在才能实现数据绑定。通过索引的方式去改变数组,不能渲染视图。
// 数组变异方法:push、pop、shift、unshift、sort、reverse、splice
test: "Hello World ~",
isShow: true,
obj: {}
}
});
// oVue.$set(Object,'prop','item') -- 改变引用值内的数据,并且渲染到视图上、
oVue.$set(oVue.obj, "abc", "item");
// $nextTick -- 通过回调拿到最新的dom节点
oVue.$nextTick(() => {
console.log("-- 页面重新渲染完毕执行");
console.log(oVue.$el);
});
// 通过$mount方法将数据挂载到dom节点绑定、(跟'new Vue'的'el'二选一)
// oVue.$mount("#demo");
console.log(oVue.test);
</script>
```
## :-: 指令
```
<!-- 指令:
1. v-pre -- 不进行差值渲染
例:<div v-pre>{{ test }}</div>
2. v-cloak -- 加载时防止显示差值表达式(闪现),配合CSS代码 [v-cloak]{display:none;}
3. v-once -- 固定渲染的结果,下次再改变js数据时。视图的数据依然不改变、
4. v-html -- == innerHTML,将字符串让做html节点插入到dom中 (要注意XSS攻击)
例:<div v-html="test"></div> -- test 直接就是{{ test }}
5. v-text -- == innerText
例:<div v-text="test"></div> -- test 直接就是{{ test }}
6. v-if -- 判断,dom节点是否需要展示。是直接移除dom节点
7. v-else-if -- 否则如果,展示...
8. v-else -- 否则,展示...
例:<div v-if="isShow == 1">文本节点1</div>
<div v-else-if="isShow == 2">文本节点2</div>
<div v-else>文本节点3</div>
9. v-show -- 是否显示,原理是改变CSS:display: none; 注意在template标签v-show不生效、
例:<div v-show="isShow">文本节点</div>
10. v-bind: -- 将数据绑定到属性、v-bind: 可以简写成 : (冒号)
例:<img :src="srcUrl" :class="[redClass,addClass, true?'aaa':'bbb']" /> -- 如果添加多个class属性值,需要以数组的形式 (支持三目)
例2:<div :style="{width:'100px',height:'100px',backgroundColor: obj.red }"></div> -- css属性值要以小驼峰形式写、
11. v-on: -- 绑定事件、v-on: 可以简写成 @ 、还可以传递参数、
例:<button id="app" @click="change('abc',test)">提交</button>
<script>
let oVue = new Vue({
// 需要绑定的dom,像CSS选择器一样选
el: "#app",
// data -- 数据写在这里
data: { test: "-- ok" },
// methods -- 事件方法写在这里面
methods: {
// this === oVue
change( val, val2 ) { console.log(1, this.test, val, val2) } // 返回 1 "-- ok" "abc" "-- ok"
}
});
</script>
12. v-for -- 列表渲染,传递一个数组来喧杂
例:<ul id="app"> -- :key -- 必须是唯一的
<li v-for="(item,index) in arr" :key="item.id">{{ index + " - " + item.name }}</li>
</ul>
<script> new Vue({ el: "#app", data: { arr: [{name:"a",id:01},{name:"b",id:02},{name:"c",id:03}] } }); </script>
补充:<li v-for="(item,index) in Array" :key="index">{{item}}</li> -- 遍历数组(语义化)
<li v-for="(key,value) in Object" :key="key">{{value}}</li> -- 遍历对象(语义化)
<li v-for="item in 9">{{item}}</li> -- 遍历数字(1~9)
<li v-for="item in 'abcdef'">{{item}}</li> -- 遍历字符串
13. v-model -- 进行双向数据绑定、可以使用双向数据绑定的表单元素:input[type="text"]、input[type="checkbox"]、input[type="radio"]、textarea、select
例:<div id="app"> <input type="text" v-model="content"> <p>{{ content }}</p> </div>
<script> const oVue = new Vue({ el: "#app", data: {content: 'abc'} }); </script>
-->
```
```
<!-- template -- 包裹标签,没有任何意义。加载后不显示在html里。一般用于集中操作 -->
<template v-if="true">
<spn>1</spn>
<spn>2</spn>
<spn>3</spn>
</template>
```
## :-: [一个小练习](http://a-1.vip/demo/vue/task.html)
![](https://box.kancloud.cn/b2a3a7e3af337114f9d9afbead67b7c6_241x173.png)
```
<div id="app" v-cloak>
<!-- $event -- 事件参数 -->
<!-- <input type="text" v-model="task" @keyUp="addTaskList($event,'key')"> -->
<!-- @keyUp[.按值] -- 修饰符、如:@keyUp.enter or @keyUp.13 -- -->
<input type="text" v-model="task" @keyUp.13="addTaskList">
<button @click="addTaskList">提交</button>
<p>正在添加的任务:{{ task }}</p>
<h3>所有任务</h3>
<ul>
<li v-for="(item,index) in taskList" :key="index">
<span>{{ item }}</span>
<button @click="dleTask(index)">删除</button>
</li>
</ul>
</div>
<script>
const oVue = new Vue({
el: "#app",
data: { task: 'abc', taskList: [] },
methods: {
addTaskList(e, type) {
let self = this;
if (!self.task) return;
self.taskList.push(self.task);
self.task = '';
},
dleTask(index) {
delete this.taskList.splice(index, 1);
}
}
});
</script>
```
```
// 配置一个语义化的修饰符
Vue.config.keyCodes = {
// camelCase won`t work
'key-enter': 13 // @keyUp.key-enter
}
```
- 前端工具库
- HTML
- CSS
- 实用样式
- JavaScript
- 模拟运动
- 深入数组扩展
- JavaScript_补充
- jQuery
- 自定义插件
- 网络 · 后端请求
- css3.0 - 2019-2-28
- 选择器
- 边界样式
- text 字体系列
- 盒子模型
- 动图效果
- 其他
- less - 用法
- scss - 用法 2019-9-26
- HTML5 - 2019-3-21
- canvas - 画布
- SVG - 矢量图
- 多媒体类
- H5 - 其他
- webpack - 自动化构建
- webpack - 起步
- webpack -- 环境配置
- gulp
- ES6 - 2019-4-21
- HTML5补充 - 2019-6-30
- 微信小程序 2019-7-8
- 全局配置
- 页面配置
- 组件生命周期
- 自定义组件 - 2019-7-14
- Git 基本操作 - 2019-7-16
- vue框架 - 2019-7-17
- 基本使用 - 2019-7-18
- 自定义功能 - 2019-7-20
- 自定义组件 - 2019-7-22
- 脚手架的使用 - 2019-7-25
- vue - 终端常用命令
- Vue Router - 路由 (基础)
- Vue Router - 路由 (高级)
- 路由插件配置 - 2019-7-29
- 路由 - 一个实例
- VUEX_数据仓库 - 2019-8-2
- Vue CLI 项目配置 - 2019-8-5
- 单元测试 - 2019-8-6
- 挂载全局组件 - 2019-11-14
- React框架
- React基本使用
- React - 组件化 2019-8-25
- React - 组件间交互 2019-8-26
- React - setState 2019-11-19
- React - slot 2019-11-19
- React - 生命周期 2019-8-26
- props属性校验 2019-11-26
- React - 路由 2019-8-28
- React - ref 2019-11-26
- React - Context 2019-11-27
- PureComponent - 性能优化 2019-11-27
- Render Props VS HOC 2019-11-27
- Portals - 插槽 2019-11-28
- React - Event 2019-11-29
- React - 渲染原理 2019-11-29
- Node.js
- 模块收纳
- dome
- nodejs - tsconfig.json
- TypeScript - 2020-3-5
- TypeScript - 基础 2020-3-6
- TypeScript - 进阶 2020-3-9
- Ordinary小助手
- uni-app
- 高德地图api
- mysql
- EVENTS
- 笔记
- 关于小程序工具方法封装
- Tool/basics
- Tool/web
- parsedUrl
- request