Vue.js 的特点:
Vue.js 的目标
前端三大主流框架:
vue.js 数据驱动和组件化开发,轻量级,分层渐进式框架
React.js 数据驱动和组件化开发,灵活性很高,需要什么都得自己构建逻辑自己写
Angular.js 数据驱动 1.0 ,加上了组件化开发2.0,重量级框架;大型企业OA办公(指令系统)
第一类:
1.本地js文件引入
2.CDN引入
3.webpack 打包
4.编辑器生成(HBuilder)
第二类:(vue脚手架 需要加载器转码再引入到网页中)
1.自己打包配置加载器(自己构建vue脚手架)
2.官方脚手架
npm i @vue/cli -g
vue create app
cd app
npm run serve
3.可视化项目管理方式 vue ui
4.编辑器直接生成脚手架环境的方式(HBuilder)
示例版本:7.18.6 已更新到12.3.8
"~7.18.6" :直接下载最新版 即12.3.8
"^7.18.6" :下载7-版本号的最新版 如 7.20.8(7开头的版本中的最新版)
"7.18.6" :下载固定版本 即7.18.6 不能升级
- let vm = new Vue({
- el: "#app",
- data: {
-
- }
- })
}}
{{js表达式}}外不是js的环境 直接显示内容
- <div id="app">
- <h2>{{msg1}}h2>
- <h2>{{msg1+"这一句是js表达式(拼接)"}}h2>
- <h3>{{obj.name}}:{{obj.age}}h3>
- <h4>现在学的是:{{arr[0]}}h4>
- div>
-
- <script>
- let vm = new Vue({
- el: "#app",
- data: {
- msg1: "hello",
- obj: {
- age: 21,
- name: "haha",
- },
- arr: ["vue", "react"],
- }
- })
- script>
显示结果:
v-cloak==>有属性的标签相当于在构建虚拟节点的时候就会有这个属性:
当data的数据生成时,该标签会自动去掉属性
可以利用这个特性在css中把某个元素在加载初期写成隐藏样式
- <div class="app1" v-cloak>
- <div v-text="msg2">div>
- <div v-html="msg3">div>
- <div v-pre>{{msg4}}div>
- <span v-html>{{msg5}}span>
- <br><br>
- <div v-text="info.name">div>
- <div v-html="info.snum">div>
- <br><br>
- div>
-
- <script>
- new Vue({
- el: ".app1",
- data: {
- msg2: "<h2>v-text :底层是innerTexth2>",
- msg3: "<h2>v-html :底层是innerHTMLh2>",
- msg4: "跳过编译 (静默) 原样显示内容{{msg4}}",
- msg5:"上一内容是 跳过编译(静默) 所以原样显示内容{{msg4}}",
- info: {
- name: "xixi",
- snum:"H5220301",
- },
- }
- })
- script>
显示结果:
vue第一次加载的时候 页面上的数据会闪烁:
界面加载的时候会把节点直接挂载到文档树中,导致{{js表达式}}这个字符串会显示一下
vue对象生成data数据时会再次刷新界面 把{{js表达式}}字符串替换成结果字符串
所以界面第一次加载的时候会闪屏
解决办法:
1.添加一个属性选择器:v-cloak 在vue框架运行时 会把项目中的v-cloak属性去掉
css中 :[v-cloak]{display:none}
div中添加属性选择器 运行vue前锁住代码 运行时解锁代码
2.$mount挂载
3.尽量使用指令(v-html,v-text)渲染页面
- <div class="app2">
- <img v-bind:src="obj.tx">
- <div v-text="obj.name">div>
- <h3 v-html="week[0]">h3>
- <a v-bind:href="baidu[0].source">{{baidu[0].site}}a>
- <a v-bind:href="baidu[0].source" v-html="baidu[0].site">a><br>
- <input type="text" v-bind:value="email"><br>
- <input type="text" :value="email">
- div>
- <script>
- new Vue({
- el: ".app2",
- data: {
- obj: {
- name: "dog",
- age: 1,
- tx: "https://t7.baidu.com/it/u=848096684,3883475370&fm=193&f=GIF"
- },
- week: ["Monday", "Friday"],
- baidu: [{
- source: "http://www.baidu.com",
- site: "百度"
- }],
- email: "123@qq.com",
- }
- })
- script>
显示结果: