vue入门笔记(新手入门必看)
一、什么是Vue?
1. vue为我们提供了构建用户界面的渐进式框架,让我们不再去操作dom元素,直接对数据进行操作,让程序员不再浪费时间和精力在操作dom元素上,解放了双手,程序员只需要关心业务,提高了开发效率。
2. 框架和库的区别
框架是一整套解决方案,对项目的侵入性较大,项目如果需要更换框架的话,则需要重新架构整个项目
库(相当于是一个插件)提供了某一个功能,对项目入侵性小,如果当前这个库无法满足某些功能的话,可以很容易的切换到其他库,完成该需求
3. vue的基本语句:
var vm = new Vue({/* 根实例 */
el : '#app',
// 指向的哪个元素(实例的挂载目标)
data : {
msg:"你好"
},
// 所有根实例下的数据
methods : {}
// 所有根实例下的方法区别
});
此时我们如果想要把msg中的数据渲染到页面上 需要用到以下方法:
<div id="app">
<div>{{msg}}</div>
<div v-text="msg"></div>
<div v-html="msg"></div>
</div>
4. {{}} 和 v-text v-html 三者之间的区别:
用{{}}取值的话会产生闪烁问题,但是不会覆盖元素中原来的内容
用v-text取值的话没有闪烁问题,但是会覆盖元素中原来的内容
用v-html取值没有闪烁问题,与前两者不同之处在于v-html可以将数据里面的内容按照html的格式去进行解析
msg:"<h3>你好</h3>" //这种数据的话就得用v-html进行解析了 其他两者不会将h3转换为标签
页面最终的输出结果
5. 下面来说一说如何解决闪烁问题
这里又用到了一个新的指令:v-cloak
<div id="app" v-cloak> //这个指令一般建议添加到挂载vue元素上 这样它里面的元素也不会有闪烁问题了
css代码:
<style>
[v-cloak]{display: none;} //在样式里面用属性选择器选择我们的v-cloak指令 然后写个隐藏样式
</style>
下面来说一说v-for的使用:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
[v-cloak]{display: none;}
</style>
</head>
<body>
<!-- 以前拼字符串innerhtml -->
<!-- vue提供了一个指令 V-for 解决循环问题 更高效 会复用原有的格式 -->
<div id="app" v-cloak>
<!-- 去除闪烁 -->
<!-- 要循环谁 就在谁的身上增加V-for属性 -->
<!-- 默认是value of 数组 (value,index) -->
<ul>
<li v-for="(fruit,index) in fruits">
{{fruit.name}} {{index+1}}
<ul>
<li v-for="(c,chlidindex) in fruit.color">
{{c}}{{index+1}}.{{chlidindex+1}} </li>
</ul>
</li> </ul>
<div v-for="c in 'aaaa'">{{c}}</div>
<div v-for="c in 30">{{c}}</div>
<div v-for="(value,key,index) in obj">{{value}}:{{key}}:{{index}}</div>
<div @click="show">aaaaa</div>
</div>
<script src="../node_modules\vue\dist\vue.js"></script>
<script>
var vm = new Vue({
el:"#app",
data:{
obj:{name:'zfpx',age:9,address:"xxx"},
fruits:[
{name:"香蕉",color:['green','yellow']},
{name:"苹果",color:['red','green']},
{name:"西瓜",color:['pink']}]
},
methods:{
show:function () {
alert("123");
}
}
})
</script>
</body>
</html>
下面说一说v-model 实现双向的数据绑定:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
<h1>{{msg}}</h1>
<!-- v-bind 只能实现数据的单向绑定 从 M 自动绑定到 V中去 无法实现数据的双向绑定 -->
<!-- 使用v-model指令 可以实现表单元素和model中数据的双向数据绑定 -->
<!-- v-model 只能用在表单元素中 -->
<!-- input text address -->
<input type="text" v-model='msg'>
</div>
<script src='../node_modules/vue/dist/vue.js'></script>
<script>
var vm = new Vue({
el:"#app",
data:{
msg:'你好啊'
},
})
</script>
</body>
</html>
这个是刚打开浏览器时的状态
然后去控制台修改数据,就实现了双向的数据绑定
下面说一说vue中行内样式的设置
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
}
.red{
color: red;
}
.italic{
font-style: italic;
}
.active{
letter-spacing: 0.5em;
}
.then{
font-weight: 220;
}
</style>
</head>
<body>
<div id="app">
<!-- 这是第一种使用方式 直接传递一个数组 注意 这里的class需要使用v-bind做数据绑定 -->
<!-- <h1 :class="['italic','then']">这是一个很大很大的h1,大到你无法想象</h1> --> <!-- 在数组中使用三元表达式 -->
<!-- <h1 :class="['italic','then',flag? 'active':'']">这是一个很大很大的h1,大到你无法想象</h1> --> <!-- 在数组中使用对象来代替三元表达式 提高代码的可读性 -->
<!-- <h1 :class="['italic','then',{'active':flag}]">这是一个很大很大的h1,大到你无法想象</h1> --> <!-- 在为class使用 v-bind绑定对象的时候 对象的属性是类名 由于对象的属性可带引号可不带,属性的值是一个标识符 -->
<h1 :class="classobj">这是一个很大很大的h1,大到你无法想象</h1>
</div>
<script src="../node_modules/vue/dist/vue.js"></script>
<script>
var vm = new Vue({
el : '#app',
data : {
flag:true,
classobj:{red:true,then:true,italic:false,active:false}
},
methods : {}
});
</script>
</body> </html>
下面说一说vue中的事件修饰符
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
<div @click="one">
<!-- 使用.stop来进行阻止冒泡 -->
<button @click.stop="two">第二个按钮</button>
</div>
<!-- 使用.prevent来进行阻止冒泡 -->
<a href="https://www.baidu.com" @click.prevent='linkc'>我要去百度</a>
<!-- 使用.capture 实现捕获触发事件的机智-->
<div @click.capture="one">
<button @click="two">第二个按钮</button>
</div>
<!-- 使用.self 只会阻止自己身上冒泡行为的触发 并不会真正阻止别的事件中-->
<div @click.self="one">
<button @click="two">第二个按钮</button>
</div>
</div>
<script src='../node_modules/vue/dist/vue.js'></script>
<script>
var vm = new Vue({
el:"#app",
data:{ },
methods:{
one(){
alert(1)
},
two(){
alert(2)
},
linkc(){
console.log('触发了链接的事件');
}
}
})
</script>
</body>
</html>
最新文章
- c++之字符型中的特殊字符回车符
- iOS 网络请求NSURLSession
- 【转】MyEclipse第一个Servlet程序
- oracle数据库的导出与导入
- PHP 访问类中的静态属性
- [译]Stairway to Integration Services Level 18 – 部署和执行
- 常用的JQuery数字类型验证正则表达式
- linux的学习系列 5--环境变量
- Java基础二
- 第6章 Overlapped I/O, 在你身后变戏法 ---被激发的 File Handles -3
- ios获取内核数目
- Elasticsearch java api 基本搜索部分详解
- 关于 dos 下 npm 命令的使用
- 【gearman】gearmand -d 无反应解决
- windows将文件夹映射为虚拟磁盘
- Luogu3763 TJOI2017 DNA NTT/SA
- Redis环境安装
- Add to Array-Form of Integer LT989
- 基于卷积神经网络的手写数字识别分类(Tensorflow)
- SQL Server从BAK文件还原新的数据库