Vue程序

Vue程序

Vue常用的7个属性

  1. el属性
    • 用来指示vue编辑器从什么地方开始解析,Vue的语法可以说是一个占位符
  2. data属性
    • 用来组织从View中抽象出来的属性,可以说将试图的数据抽象出来存放在data中
  3. template属性
    • 用来设置模板,会替换页面元素,包括占位符。
  4. methods属性
    • 放置在页面中的业务逻辑,JS方法一般都会放置在methods中
  5. render属性
    • 创建真正的Virtual Dom
  6. computed属性
    • 用来计算
  7. wetch属性
    • watch:function(new.old){}
    • 监听data中数据的变化
    • 两个参数,一个返回心智,一个返回旧值
  • Vue基本语法

    <script type="text/javascript" src="../js/vue.min.js"></script>
    <script>
    let vm = new Vue({
    el: "#app",
    data: {
    message: "hello,vue!"
    }
    });
    </script>
    
  • Vue绑定事件

    <button v-on:click="sayHi">click Me</button>
    <!--导入Vue.js-->
        <script type="text/javascript" src="../js/vue.min.js"></script>
        <script>
            let vm = new Vue({
                el: "#app",
                data: {
                      message: "hello,vue!"
                },
                methods: {
                    sayHi: function () {
                        alert(this.message);
                    }
                }
            });
        </script>
    <!--双向绑定-->
    <div id="app">
    
        输入的文本:<input type="text" v-model="message"> {{message}}
    
    </div>
    
    <!--导入Vue.js-->
    <script type="text/javascript" src="../js/vue.min.js"></script>
    <script>
        let vm = new Vue({
            el: "#app",
            data: {
                message: "hello,vue!"
            },
            methods: {
                sayHi: function () {
                    alert(this.message);
                }
            }
        });
    </script>
    

    第一个Vue-cli项目

    1、什么是vue-cli

    ​ vue-cli官方提供的一个脚手架,用于快速生成一个vue的项目模板。

    预先定义好目录结构及基础代码,就好比我们在创建Maven项目时可以创建一个骨架项目,这个骨架项目就是脚手架,我们的开发更加的快速;

    主要的功能

    • 同意的目录结构
    • 本地调试
    • 热部署
    • 单元色是
    • 集成打包上线

    创建 vue init webpack myvue

    打开 npm run dev

2、vue组件

  • 组件是可复用的Vue实例,说白了就是一组可以重复使用的模板,跟JSTL的自定义标签Thymeleaf的th:fragment等框架有着异曲同工之妙,通常一个应用会以一颗嵌套的组件树的形式来组织:

3、网络通信

  • Axios:是一个开源的可以用在浏览器端和Node JS的异步通信框架,她的主要作用是实现AJAX异步通信,其功能特点如下。
    • 从浏览器中创建XMLHttpRequests
    • 从node.js创建http请求
    • 支持Promise API[JS中链式编程]
    • 拦截请求和响应数据
    • 取消请求
    • 自动转换JSON数据
    • 客户端支持防御XSRF(跨站请求伪造)
{
  "name": "Aaron",
  "url": "https://blog.kuangstudy.com",
  "page": 1,
  "inNonProfit": true,
  "address": {
    "street": "含光门",
    "city": "陕西西安",
    "country": "中国"
  }
}
<div id="vue">
    <div>
        {{info.name}}
        {{info.address.street}}
        {{info.address.city}}
        {{info.address.country}}
    </div>
    <a v-bind:href="info.url">点我</a>
</div>

<!--导入Vue.js-->
    <script type="text/javascript" src="../js/vue.min.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script>
        let vm = new Vue({
            el: "#vue",
            data(){  // 请求的返回参数格式,必须和JSON字符串一样
                return{
                    info: {
                        name:null,
                        address:{
                            street:null,
                            city:null,
                            country:null
                        },
                        url: null
                    }

                }
            },
            mounted(){  // 钩子函数链式编程
                axios.get('../data.json').then(response=>(this.info = response.data));
            }
        })
    </script>

4、计算属性

  • 计算出来的结果,保存在属性中,内存中运行:虚拟DOM

    <div id="app">
        <p>currentTime:{{currentTime1()}}</p>
        <p>currentTime:{{currentTime2}}</p>
    </div>
    <script type="text/javascript" src="../js/vue.min.js"></script>
    <script>
        let vm = new Vue({
            el: "#app",
            data: {
                message: "hello,Aaron",
            },
            methods:{
                currentTime1: function () {
                    return Date.now();  // 返回一个时间戳
                }
            },
            computed:{      // 计算属性
                currentTime2: function () {
                    return Date.now();  // 返回一个时间戳
                }
            }
        })
    </script>
    
    • 说明:
      1. methods:定义方法,调用方法是用currentTime1(),需要带括号
      2. computed:定义计算属性,调用属性使用currentTime2,不需要带括号;this.message是为了能够让currentTime2观察到数据变化而变化
      3. 如何在方法中的值发生变化,则缓存就会刷新,可以再控制台使用vm.message="qinjiang",改变下数据的值,再次测试观察效果
    • 结论:
      • 调用方法时,每次都需要进行计算,既然有计算的过程则必定产生系统开销,哪如果这个结果是不经常变化的呢?此时就可以考虑将这个结果缓存起来,采用计算属性可以很方便的做到这一点,计算属性的主要特性就是为了将不经常变化的计算结果进行缓存,以节约我们的系统开销,

5、插槽(slot)

  • 在Vue.js中我们使用<slot>元素作为承载分发内容的出口,坐着称其为‘插槽’
  1. 定义一个待办事项的组件

    Vue.component("todo",{
    	template: "<div> \
    				<div>待办事项</div>\
    				<ul>\
    					<div>内容</div>\
    				</ul>\
    			</div>\
    	"
    });
    
  2. 实现待办事项的标题和值,动态绑定。

           Vue.component("todo",{
                template: "<div> \
                                <slot name='todo-title'></slot>\
                                <ul>\
                                    <slot name='todo-items'></slot>\
                                </ul>\
                           </div>\
                "
            });
    

    代码:

        <div id="app">
            <todo>
                <todo-title slot="todo-title" :title="title"></todo-title>
                <todo-items slot="todo-items" v-for="item in todoItems" :item="item"></todo-items>
            </todo>
        </div>
        <script type="text/javascript" src="../js/vue.min.js"></script>
        <script>
    <!--        组件-->
            Vue.component("todo",{
                template: "<div> \
                                <slot name='todo-title'></slot>\
                                <ul>\
                                    <slot name='todo-items'></slot>\
                                </ul>\
                           </div>\
                "
            });
    
            Vue.component("todo-title",{
                props: ['title'],
                template: '<div>{{title}}</div>'
            });
            Vue.component("todo-items",{
                props: ['item'],
                template: '<li>{{item}}</li>'
            })
    
    
            let vm = new Vue({
                el: "#app",
                data:{
                    title: "Aaron列表",
                    todoItems:['Aaron','Andy','Amder']
                }
            })
        </script>
    

6、自定义组件

  • 通过以上代码不难发现,数据项在Vue的实例中,但删除操作要在组件中完成,那么组件如何才能删除Vue实例中的数据呢?此时就涉及到参数传递与事件分发了,Vue为我们提供了自定义事件的功能很好的帮助了我们解决了这个问题;使用this.$emit(‘自定义事件名’,参数),操作过程如下:
  1. 在Vue对象中创建方法

    methods: {
    	removeItems:function (index) {
    		console.log("删除了"+this.todoItems[index]+"Ok");
    		this.todoItems.splice(index,1);  // 一次删除一个元素
    	}
    }
    
  2. 在组件中创建(只能绑定当前组件的方法)

    // 只能绑定当前组件的方法
    template: '<li>{{index}}---{{item}}<button 		@click="remove()">删除</button></li>',
    methods: {
    remove: function (index) {
        //自定义事件分发
        this.$emit("remove",index)
    }
    }
    
  3. 在视图层建立组件与Vue的链接v-on:remove="removeItems(index)" :key="index"

  4. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B6ZWJd4u-1619428781506)(C:\Users\Andy\AppData\Roaming\Typora\typora-user-images\image-20201112184812633.png)]

总结:

1、核心

  • 核心:数据驱动。组件化
  • 优点:借鉴了AngulaJS的模块化开发和React的虚拟Dom,虚拟Dom就是把操纵放到内存中执行;

2、常用属性

  1. v-if
  2. v-else-if
  3. v-else
  4. v-for
  5. v-on 绑定事件,简写@
  6. v-model 数据双向绑定
  7. v-bind 给组件绑定参数,简写

3、组件化

  • 组合组件slot插槽
  • 组件内部绑定事件需要使用到this.$emit(“事件名”,参数);
  • 计算属性的特点,缓存计算数据

遵循SoC关注度分离原则,Vue是纯粹的视图框架,并不包含,比如Ajax之类的通信功能,为了解决通信问题,我们需要使用Axios框架做异步通信;


第一个Vue-cli项目

  • vue-cli官方提供的一个脚手架,用于快速生成一个Vue的项目模板。
  • 主要的功能
    1. 统一的目录结构
    2. 本地调试
    3. 热部署
    4. 单元测试
    5. 集成打包上线
  • 需要的环境
    • Node.js https://nodejs.org/zh-cn/
    • 确认Node.js安装成功
      • cmd输入node -v,查看是否能够正确打印出版本号即可!
      • cmd输入npm -v,查看是否能够正确打印出版本号即可!
    • 安装Node.js淘宝镜像加速器(cnpm)npm install cnpm -g
  • 创建Vue cli项目
    1. 用管理员模式打开cmd 进入到要在的位置创建的文件夹下 cd可以进 入
    2. 输入 vue init webpack myvue
    3. 一路No,创建成功
  • 初始化并且运行
    1. cd myvue (进入项目)
    2. npm install (安装依赖)
    3. npm run dev (运行项目)
    4. ctrl+c (停止)
  • 安装webpack -g 打包
    • npm install webpack -g
    • npm install webpack-cli -g

1、webpack打包

  1. 创建项目

  2. 创建一个目录用于放置JS模块等资源文件

  3. 在目录下创建js文件,

    // 暴露一个方法
    exports.sayHi = function () {
        document.write("<h3>Aaron</h3>")
    }
    
  4. 在目录下创建一个名为main.js的入口文件,用于打包时设置entry属性

    // 引入
    let hello = require("./hello");
    hello.sayHi();
    
  5. 在项目目录下创建webpack.config.js配置文件,使用webpack命令打包

    module.exports = {
        entry: './modules/main.js',
        output: {
            filename: "./js/bundle.js"
        }
    }
    
  6. 测试打完后的包

    <script src="./dist/js/bundle.js"></script>
    
    1. 打包 webpa ck
    2. 热部署打包 webpack --watch

2、vue-router路由

  • 说明:Vue Router是Vue.js官方的路由管理器,它和Vue.js的核心深度集成,上构建单页面应用变得易如反掌

  • 安装

    • 基于一个vue-cli进行测试学习,先查看node_modules中是否存在cue-router

    • vue-router是一个插件包,所以我们还是需要用npm/cnpm来进行安装的,打开命令行工具,进行你的目录,输入下面命令

      npm install vue-router --save-dev
      

      如果在一个模块化工程中使用它, 必须要通过Vue,use()明确地安装路由功能:

  • 步骤

    1. components下创建组件(Vue)

      <template>
        <h3>内容页</h3>
      </template>
      
      <script>
          export default {
              name: "Content"
          }
      </script>
      
      <style scoped>
      
      </style>
      
    2. 在Src文件下创建路由文件(router)下创建index.js配置文件

      // 导入Vue
      import Vue from 'vue'
      // 导入路由
      import VueRouter from 'vue-router'
      // 导入组件:content
      import Content from '../components/Content'
      // 导入组件:Main
      import Main from '../components/Main'
      
      // 安装路由(把路由安装到Vue里)
      Vue.use(VueRouter);
      
      // 配置导出路由
      export default new VueRouter({
        routes:[
          {
            // 路由的路径
            path: '/content',
            // 跳转的组件
            component: Content
          },{
            // 路由的路径
            path: '/main',
            // 跳转的组件
            component: Main
          }
        ]
      })
      
    3. 在main主线路

      1. import router from './router' 导入自动扫描路由

      2. new Vue({
          el: '#app',
          // 配置路由
          router,
          components: { App },
          template: '<App/>'
        })
        
    4. 在App.vue展示出组件

      <template>
        <div id="app">
          <h3>Aaron</h3>
          <router-link to="/main">首页</router-link>
          <router-link to="/content">内容页</router-link>
          <router-view></router-view>
        </div>
      </template>****
      

3、创建项目

整合Vue+Element-ui

  1. vue init webpack hello-vue 创建项目

  2. 进入创建好的项目cd hello-vue

  3. 安装路由 npm install vue-router --save-dev

  4. 安装 element-ui npm i element-ui -S

  5. 安装 依赖 npm install

  6. 安装 SASS 加载器 cnpm install sass-loader node-sass -save-dev

  7. 写组件

  8. 写路由

  9. 在主窗口导入Element-ui、安装路由

    // 导入Element-ui
    import Element from 'element-ui'
    import 'element-ui/lib/theme-chalk/index.css';
    
    // 安装路由
    Vue.use(router);
    Vue.use(Element);
    
  10. 进入项目cd 项目名

  11. 运行项目 npm run dev


4、路由嵌套

  • 嵌套路由又称子路由,在实际应用中,通常由多层嵌套的组件组合而成,同样地,URL中各段动态路径也按某种结构对应嵌套的各层组件,
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fKAEnc6D-1619428781509)(F:\Y2课程\Y2课程体系\VueNote\img\image-20201114095125467.png)]
      path: '/main',
      component: Main,
      children:[  // 嵌套路由
        {path:'/user/profile',component:pro},
        {path:'/user/list',component:list}
      ]

安装路由

// 导入Element-ui
import Element from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css';

// 安装路由
Vue.use(router);
Vue.use(Element);
  1. 进入项目cd 项目名

  2. 运行项目 npm run dev


4、路由嵌套

  • 嵌套路由又称子路由,在实际应用中,通常由多层嵌套的组件组合而成,同样地,URL中各段动态路径也按某种结构对应嵌套的各层组件,
  • [外链图片转存中…(img-fKAEnc6D-1619428781509)]
      path: '/main',
      component: Main,
      children:[  // 嵌套路由
        {path:'/user/profile',component:pro},
        {path:'/user/list',component:list}
      ]

children: 路由嵌

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值