Vue2.5 基础


一、创建第一个实例

1) 官网:https://cn.vuejs.org/

2) 安装

 

3) 直接下载并用 <script> 标签引入,Vue 会被注册为一个全局变量。

a. 开发版本:包含完整的警告和调试模式

b. 生产版本:删除了警告 30.90KBmin + gzip

c. CDN:

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>

d. NPM|CLI...

 

4) 引入之后 new Vue({}) ;创建实例

a. 减少 dom 操作 着重于数据

b. 与标签绑定 el:dom 节点--- (element)

c. 提供标签需要的数据 data:{}

 

5) 挂载点模板与实例之间的关系

a.

挂载点:vue 实例中 el:绑定的标签

vue 只会处理挂载点下面的内容

如:上述 el:’#test’ 挂载点就是 id=”test”的标签

b. 模板: 挂载点里面的所有标签内容 ---模板内容

a) 挂载点标签里面的模板内容

 

b) 通过 vue 实例设置 模板内容 template:

 

c. 实例: 绑定挂载点 el:”” 设置模板:template:”” 设置数据 data:{} 将模板数据与挂载点拼装成最终的展示效果

6) Vue 实例中的数据事件与方法

a. 数据 {{}} | v-text|v-html

 

b. 事件绑定 v-on:click="函数名" 函数定义在 vue 实例 methods:{函数名:function() {}}

 

修改模板内容 不需要 dom 操作标签 面向数据编程

 

c.

v-on:click="函数名"

简写 @click="函数名"

 

7) Vue 中属性绑定和双向数据绑定

a. v-bind:属性名="属性值" 属性值一般定义在 vue 实例中

v-bind:属性名 简写成 :属性名

模板指令之后 属性值是一个 js 表达式

b. 双向数据绑定

a) 之前的绑定是单向绑定定义好数据之后 标签里面只能输出 不能修改数据

b) 双向绑定:标签里面输出定义好的数据标签里面的数据改变了 data:{}中的数据同步改变

 

8) Vue 中的计算属性和侦听器

a. 场景:某一个变量的值是通过其他变量计算得到的

 

<!--

fullName 是通过 firstName lastName 两个变量计算的来

 

如果变量没改变下次调用 fullName 的时候调用的是缓存

的值

只有 当 A,B...变量改变了才会重新计算 fullName 的值

-->

 

b. 侦听器监听某个数据发生的变化 同理下面代码可以直接侦听计算属性 fullName

 

9) V-if | v-show | v-for 指令

a. v-if 判断真假假:标签从 DOM 树删除真: DOM 树新增标签

 

b. v-show 为假的时候 标签加上 style=”display:none”; 标签不会从DOM树删除如若是频繁控制标签显隐 推荐 v-show 不会频繁操作 DOM 树性能较高

 

c. V-for 循环

 

二、todoList 功能开发

(1) 要求:

 

(2) 思路:

1) 绑定标签 在标签里面有输入框 button 提交按钮下面有 li 列表展示 schedule

2) Input 框双向数据绑定 v-model

3) button@click 事件 methods:{}

4) 数组存储 iunput 输入的数据 v-for 遍历



 

<!DOCTYPE html>
<html>
<head>
<meta charset="utf8" />
<title>vue</title>
<!-- script 标签引入 vue.js 最好在 head 头避免页面抖屏 -->
<script type="text/javascript" src="/static/index/js/vue.js"></script>
</head>
<body>
<pre> 简单的 todolist
</pre>
<div id="test" style="margin:auto ;"> <div>
<input type="" name="" v-model="inputValue"/>
<button @click="handleClick">提交</button>
</div>
<ul>
<li v-for="(item,index) of list" :key="index">{{item}}</li>
</ul>
</div>
<script>
new Vue({
el:"#test" , data: { inputValue: "" , list: [],
},
methods: { handleClick: function() {
//把 input 输入的值 push 向数组尾部添加数据
// this.list.push(this.inputValue) ;
//unshift 向数组头部添加数据
this.list.unshift(this.inputValue) ;
//同时 清空 iuput 输入框
this.inputValue = '' ;
}
}
}) ;


</script>
</body>
</html>

三、 todoList 组件拆分

1)组件页面上的某一部分一个页面内容比较庞大 可以拆分成几部分某一部分就是一个组件单个组件维护简单 

i)全局组件

 

ii) 局部组件
 

iii) todolist 拆分组件

 


 


<!DOCTYPE html>

 

<html>

<head>

<meta charset="utf8" />

<title>vue</title>

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>

</head>

<body>

<pre> 简单的 todolist

</pre>

<div id='test'>

<div>

<input type="" name="" v-model="inputValue">

<button @click="handleClick">点击</button> </div>

<!--

通过属性 给组件传参

content 的值即为 遍历 list 的值

-->

<ul>

<todo-item v-for="(item,index) of list"

:key="index"

:content="item"

:k="index">

</todo-item> </ul>

</div>

<script>

<!-- 注册创建全局组件

// 通过 props:[] 接受传递进来的参数

Vue.component('todo-item',{ props:['k','content'] , template:"<li>{{k}}=>{{content}}</li>" ,

}) ;

new Vue({

el:"#test" , data:{ inputValue:'' ,

list:[]

},

methods:{ handleClick:function() { this.list.unshift(this.inputValue) ; this.inputValue = '' ;

}

}

}) ;

</script>

</body>

</html>


iv) 组件与实例的关系

(1) 实例:new Vue 模板是 el:挂载点绑定下的标签内容



四、实现 todoList 的删除

1)父|子组件通信

1>-> 子组件发布信息 父组件订阅(监听)信息

<!DOCTYPE html>

<html>

<head>


<meta charset="utf8" />

<title>vue</title>

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>

</head>

<body>

<pre>

父组件|子组件交互父组件=>子组件 属性参数传递 在父组件模板内容中

content | :k 子组件中 props[] 接受参数子组件->父组件 发布订阅模式

$this->$emit('delete',index) 子组件发布 delete 事件

父组件在模板内容中 @delete="" 订阅该事件

</pre>

<div id='test'>

<div>

<input type="" name="" v-model="inputValue">

<button @click="handleClick">点击</button>

</div>

<ul>

<todo-item v-for="(item,index) of list"

:key="index"

:content="item"

:k="index"

@delete="handleDelete">

<!-- 父组件中订阅(监听 delete 事件父组件执行 handleDelete 方法)

-->

</todo-item> </ul>

</div>

<script>

<!-- 注册创建全局组件

// 通过 props:[] 接受传递进来的参数

Vue.component('todo-item',{ props:['k','content'] , template:"<li @click='handle'>{{k}}=>{{content}}</li>" ,

methods:{

// 点击子组件删除当前的 li 即删除父组件 list[]当前的记录需要子

组件与父组件通信

handle:function() {

this.$emit('delete',this.k) ;//传参 当前记录的下标

}

}

}) ;

new Vue({

el:"#test" , data:{ inputValue:'' ,

list:[]

},

methods:{ handleClick:function() { this.list.unshift(this.inputValue) ; this.inputValue = '' ;

},

handleDelete:function(k) {

// 接受传过来的下标删除对应 list[]中的值

/*

splice 删除|插入|替换

第一个参数:从第一个参数的位置第二个参数:删除一项第三个参数:插入|替换后的数据

(该参数无:实现删除功能 有:实现插入|替换功能)

*/ this.list.splice(k,1,'111111') ; }

}

}) ;

</script>

</body>

</html>

猜你喜欢

转载自blog.csdn.net/donglingjiu/article/details/80885943