vue基础

指令,事件
//指令5
       双向数据数据
与{{msg}}功能一样,但前面那个的好处是网速慢的时候也不会看到小胡子,另一个网如果不好会看到小胡子
{{content}}
只绑定一次,以后不会再受数据变化就更新了
把HTML字符当HTML代码渲染,如msg:"

hello

"页面显示就是hello,但如果用小胡子显示数据的话就是

hello

  • 要循环谁就在谁身上添加该属性,item就是当前项,index是索引 //事件 v-on:click="函数名"可以简写成@click="函数名"。 函数名要在methods里注册 1. vue会自动给函数传递事件源,即如果绑定事件的时候后面什么都不写,methods里面的方法可以直接拿到事件源e。 methods:{ fn:function (e) {console.log(e)} } 2. 如果写了()想要拿到事件源则绑定函数时括号里需要写$event作为第一个参数 methods:{ fn:function (e) {console.log(e)} } 3. 如果想要拿到事件又想传参。则第一个参数是$event从第二位开始传参数,接收参数时也是与之对应,第一个参数接收事件从第二个参数开始接收参数。 methods:{ fn:function (e,a) {console.log(e,a)}// } 4. 如果不需要事件源只传参数。可以不写$event,传参和接收参数一样还是一一对应 methods:{ fn:function (a) {console.log(a)}// }
    数组的方法
    1. filter不改变原数组,返回值是过滤后的新数组,其中回调函数的返回结果为true将当前项放入要返回的新数组,false不管
        var newary=[1,2,3,4,5].filter(function (item) {
        return 21
  • 2
  • 3
  • var newary=[1,2,3].map(function (item) { return `
  • ${item}
  • ` }); 3. includes数组中是否包含某个值,返回值true/false var result=[1,2,3].includes(3); 4. find在数组中寻找某一项,其中回调函数为true表示找到并将找到的项返回,回调函数为false未找到继续找,找到最后也没找到返回undefined var result=[1,2,3].find(function (item) { return item===1 }); 5. some查找每一项,回调函数为真停止查找,返回值为真。为假继续查找,找不到返回值为false 6. every与some相反,找不同。查找每一项,回调函数为假“停止”查找,返回值为假。为真继续查找,都是真返回值为true 我们要的就是他返回false值 使用场景,比如全选按钮。要通过计算属性计算数据里面的每一项是不是其中某项是false。用every返回每一项,如果其中一项返回false,则返回值就是false,不全选 7. reduce //reduce的回调函数共有四个参数,返回的是叠加后的结果。原数组不变(新方法的原数组都不变) //prev数组第一项,next数组第二项 //prev回掉函数的返回值会作为下一次的prev,next数组下一项 //index后一项的当前索引 //item原数组 var result=[[1,2,3],[4],[4,5]].reduce(function (prev, next,index,item,) { return prev.concat(next) }); console.log(result)//多维数组合并成一维数组

     vue脚手架(帮我们把webpack的配置都弄好了)

    1. 手动创建一个文件夹travel,在travel文件夹里面执行终端创建脚手架并初始化一个vue项目
        - 全局安装vue-cli脚手架。npm install vue-cli -g
        - 安好脚手架后全局命令行就会有一个vue命令,可以初始化一个带webpack的vue项目。 vue init webpack <项目名称>
            - 除了问你是否安装vue-router选Y,其他的都选N
    > 此时创建的vue项目就在该travel里面了。所有的依赖nodemoules和项目的相关文件都在创建的vue这个项目里了。以后再安装依赖直接在nodemoules文件夹同级下终端里执行。启动项目的时候也是在nodemoules文件夹同级下终端里执行
    2. 进入创建好的vue项目(与nodemoules文件夹同级),npm run dev跑一下脚本,能成功开启一个服务,然后在浏览器中能成功访问该服务即安装成功
    脚手架的配置文件夹config里面的index文件里可以改默认开启的服务的端口号
    

    模块

    - 最开始前端没有模块化,都是后端使用的node的模块化common.js
        - 模块的导出---module.exports={a:a}将模块里面的方法导出
        - 模块的引用---require("./a")文件(模块)名称
    - 前端模块化呢???
        - 模块的导出---export
        - 模块的引用---import
    html文件
    
    //引入类型一定要写,要不会报错a.js:1 Uncaught SyntaxError: Unexpected token {
    
    a.js文件(引入---有两种方式)
    第一种
        import {val1,val2} from './b.js';//解构赋值,引入什么变量从哪个文件里。import有预解释功能
        console.log(val1,val2);
    第二种
        import * as b from './b.js';
        console.log(b.val1,b.val2);
        不用解构赋值一个个的接收,用一个*代表所有接收到后负给一个变量b。b是一个对象
    
    b.js文件(导出)
    export let  val1='爱你';
    export let  val2='李倩';
    //会将val1,val2放在一个对象内导出{val1:"爱你",val2:"李倩"}
    
    还有一种对应的导出和引入方式
    a文件 导出    export default {a:"1",b:"李倩"}   默认将这个对象导出
    b文件 引入    import xxx from "./a.js"         引入默认导出的模块对象时,名字可以随便起不用对应了
    

     

    第三方模块和自带模块的引入直接引用不需要路径。自定义模块必须写路径,即使在同一路径下
     阿里矢量图标
    - 阿里矢量图标官网->图标库->搜索自己想要的图标加入购物车->点击购物车添加至项目->选择中间font class->然后可以下载到本地也可以使用在线链接->复制链接到新标签页打开会看到源码一样。如下图。其中.iconfont类名是必须得有的公共样式,后面的每个类名是自己独有的样式。也就是说使用字体图标是HTML标签要有这两个样式
    - 在线使用需要两步
    1. 将生成的在线代码复制,在index.html页面通过link标签引入
    2. 创建一个标签比如i,使用图标看能否使用

    前面还有看不懂的代码不用管
    .iconfont {
      font-family: "iconfont" !important;
      font-size: 16px;
      font-style: normal;
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
    }
    .icon-fanhui:before {
      content: "\e641";
    }
    .icon-denglu:before {
      content: "\e62e";
    }
    .icon-zhuye:before {
      content: "\e600";
    }
    

    下载到本地使用iconfont

    将字体图标下载到本地,其中一共有5个文件有用。
    将iconfont.eot,iconfont.svg,iconfont.ttf,iconfont.woff四个文件放入iconfont文件夹后放到项目静态资源目录下
    将iconfont.css放到项目静态资源目录下(与iconfont文件夹同级),更改iconfont.css文件内容
        .iconfont下面的内容可以删掉,引入iconfont文件夹里文件的路径需要修改
    在main.js引入iconfont.css文件,之后就可以在全局任何地方使用了,必须有类名iconfont,标签内写字体代码,如
            
            
    注意:本地使用字体图标,一定要在main.js里全局引入,而且在index.html文件之外的其他组件使用。 否则的话会出问题,比如字体图标不显示也不报错,例如 1. 在index.html页通过link标签引入,就有问题,在任何地方使用图标-不报错也不显示。 2. 在main.js里全局引入,引入是没问题,但是,在index.html页想要试试能不能显示图标,显示不了-不报错也不显示。但在其他任何组件内使用都没问题

    局部组件

    插槽slot

    - 插槽就是把子组件HTML结构中间的部分当做内容,往子组件模板slot那插,替换slot标签
    - parent元素就代表的整个子组件模板,其中把slot部分替换为parent元素中间的内容
    
    header
    var parent={ template:"
    " };
    header
    footer
    var parent={ template:`
    content
    没有内容往这里插
    ` }; 给组件模板里slot插槽起名字,HTML组件里内容与之对应的内容就会插到插槽这里

     插槽用于封装组件

    我是标题
    我是身体
    我是尾部

    实现点击按钮.两个页卡一个显示一个隐藏

       v-if实现
       利用vue自带的动态组件component
      他会根据is里面数据的变化,自动加载不同的组件
    
    显示隐藏的两个按钮是不断创建,销毁的。我们用v-once可以把他们缓存到内存里,以后就不需要创建销毁了,而是直接从内存里进出
    
    
    childone childtwo

    子传父

    - 创建子组件的同时可以给自定义HTML标签子组件监听一个自定义事件,给监听的自定义事件绑定方法该方法能改变父级的数据。该方法什么时候执行取决于子级什么时候触发该自定义事件,子级通过this.$emit("自定义事件名")可以触发自定义事件。如果触发事件的时候需要传值,子组件上只是父组件的事件名即可,子组件的方法里定义形参会自动被父组件里的方法就收到用参数
    var child={ template:"
    child
    ", methods: { xy:function () {this.$emit("my",2)} } }; var app=new Vue({ el:"#app", components:{child}, methods:{ fn:function (a) {alert(a)} } }) 当鼠标点击子组件时触发子组件身上的原生click事件使xy方法执行。xy方法执行的时候发射,触发自定义事件自定义事件绑定的父级方法执行,弹出子组件传递的参数2

    父组件通过属性将数据传递给子组件,子组件有权对父组件传递过来的属性验证

    
     //局部组件,定义之后还需要去实例里面进行注册。组件就是一个对象
    var mya={
        props:["content"],//从父组件中接收的数据(表面上是字符换实际上是变量)
        //props就像data一样,把接收到的数据挂载到实例上了。然后就可以像拿data里面的值一样拿props里的数据
        template:"
    {{content}}
    " }; var mya={ props:{ content:{ type:[String,Number],//验证传递过来的数据类型,可以是多个,字母开头必须是大写 require:true,//属性必须传 default:"default value",//如果通过属性传递数据默认值没用,如果不传使用默认值 validator:function (value) { //value就是传递过来的数据,可以对传递过来的数据进行验证 return value.length>5 } } }, template:"
    {{content}}
    " };

    计算属性和watch监听

    - 计算属性不是一个固定的数据,是根据data里的数据计算出来的。数据变化计算属性还会变,计算属性也是数据。
        - 计算属性里的函数很特殊,它的函数名,将来可以作为数据使用。函数的返回值就是动态计算出的数据。
        - 计算属性计算出来的数据不用在data里定义,跟data里的数据一样。可以直接在页面里获取使用
    - 计算属性有缓存机制---计算属性依赖的数据不发生改变时计算属性不会重新计算
        - 计算属性computed和监听器watch(也有缓存机制)都是vue自动调用,如果写成methods里的方法我们需要自己去调用且没有缓存机制
        1. 计算属性里面如果只有get方法的话,可以直接是函数,也可以写成对象形式-对象里面是get与函数属性名属性值,如下
    - [x] 使用场景:比如全选按钮。要通过计算属性计算数据里面的每一项是不是其中某项是false。
        - 用every遍历每一项,如果其中一项返回false,则返回false停止遍历。则不全选
    - [ ] v-model绑定计算属性的时候,会先执行计算属性的get方法得到计算属性。当数据改变时也会重新计算。设置数据时会执行计算属性的set方法,通过变化后的计算属性值给数据重新赋值
    
    computed:{
        val:function () {
            return this.a.every(item=>item.isselected)
        }
    }
    
    
    computed:{
        val:{
            get:function () {
            //取定义的计算属性时函数被执行
                return this.a.every(item=>item.isselected)
            },
            set:function (a){//这个方法里的a就是最新的计算属性
            //设置定义的计算属性时函数被执行
                return this.a.forEach(item=>item.isselected=val)
            }
        }
    }
    

      

    //观察一个数据是否变化,变化后干一件什么事
    watch:{
        //函数名要和观察的数据名一样
        a:function (newval,oldval) {//只有观察的a值变化时才会出发a函数
            console.log(newval,oldval);
            //每一次在input框里输入的新值是newval,上一次的值是oldval,
        }
    }
    观察路由参数变化,如果变化发送ajax。观察$route属性
    ### 标签的显示隐藏,v-show,v-if
    1
    2
    3
    必须挨在一起使用,如果中间有其他标签会报错 ``` ### Bootstrap - 想要写响应式的页面但是PC端不能用rem,Bootstrap实现了栅格化布局兼容PC端和移动端 ``` navbar-default 导航条颜色灰色 panel-warning 黄色面板 text-danger 改变文字颜色 bootstrap默认提供了几种颜色,如default,warning,danger,success,info浅蓝色,primary蓝色 想要改变某个组件的颜色如上写就可以 h3 改变字体大小(类名或标签) pull-right 让元素靠右显示 &tim就会有提示 按钮里的符号 btn btn-danger btn-xs 按钮的基本样式 active 选中 form-control 让input元素宽度百分百
    在container布局下,指定行,里面的内容占12列自适应。我规定他占6列的宽。整体会在容器内往左偏移,让整体在在容器内适量的右偏移使其居中
    ### vuetools工具
    下载工具地址https://github.com/arcliang/Vue-Devtools- 通过git下载到本地
    打开谷歌浏览器-更多工具-扩展程序。直接将Chrome文件夹拖拽到扩展程序区域,浏览器会自动识别安装
    右上角会出现灰色vue图标,以后运行vue程序时他就会亮了
    使用
    控制台会出现vue项,点击其中的root会看到所有挂在根实例上的内容
    ```
    ```
    @事件.stop          阻止冒泡
    @事件.capture       捕获,捕获先执行在执行冒泡
    @事件.prevent       取消事件的默认动作。
        例如阻止a标签的默认跳转行为
    @事件.once          事件只触发一次
    @事件.self          只有点击自己的时候触发事件(相当于事件源)
    ### mounted钩子函数里面操作DOM元素
    如果ref写在HTML标签上获取到的是HTML元素。如果写在组件名上我们获取到的是组件的实例
    如果是循环可以获取到多个元素
    {{msg}}
    mounted:function () { console.log(this.$refs.myhtml);//第二步:就可以通过this.$refs所有ref的集合,从里面哪其中的某一个了 //因为DOM渲染是异步操作,所以所有的操作DOM,都应在this.$nextTick(()=>{})中完成, // this.$nextTick(()=>{})在DOM重新渲染完后执行 }
    ### 动态绑定class和style
    class和:class绑定的样式不冲突-->
    2
    3
    4

    你可能感兴趣的:(javascript,webpack,前端)