zoukankan      html  css  js  c++  java
  • VUE 学习笔记

     
           
    问题                                                                      
    回答
    用npm安装vue
    cnpm install vue
    全局安装 vue-cli
    cnpm install --global vue-cli
    创建一个基于 webpack 模板的新项目
    vue init webpack my-project
    build 文件夹放什么
    项目构建相关代码,比如webpack
    config 文件夹放什么
    配置目标 包括端口号
    App.vue
    项目入口文件
    main.js
    项目的核心文件

    v-html 指令

    <div id="app"> <div v-html="message"></div>
    </div> <script> new Vue({ el: '#app', data: { message: '<h1>菜鸟教程</h1>' } }) </script>
    v-bind:class
    <div v-bind:class="{'{样式的class名}': 布尔值表示是否启用
    这个样式}">测试文字</div>
    v-if
    可见性是否被插入 比如  <p v-if="seen">现在你看到我了</p>
     
    new Vue({
    el: '#app',
    data: {
       seen: true,
    }
    })
    v-bind:href
    <pre><a v-bind:href="url">菜鸟教程</a></pre>
    控制input里的输入
    <input v-model="message">
    点击监听
    v-on:click="onClick"
     
    <form v-on:submit.prevent="onSubmit" >
    v-model
    v-model 指令用来在 input、select、text、checkbox、r
    adio 等表单控件元素上创建双向数据绑定
    添加属性要用
    Vue.set();
    v-if 配对的标签
    v-else 和 v-else-if
    和 v-if 类似的标签
    v-show
    v-if和v-show的区别
    v-if false 时 完全移除该元素,即 dom 树中不存在该元素
    v-show false 时 该元素依旧存在于 dom 树中。若其原有样式设置了 display: none 则会导致其无法正常显示。
    v-for
    <li v-for="site in sites">
         {{ site.name }}
       </li>
    v-for 也可用来迭代对象
    <li v-for="value in object">
       {{ value }}
       </li>
     
    或者是  
     
    <li v-for="(value, key, index) in object">
    计算属性
    computed
    监听属性值变化触发 第一种方法
    var vm = new Vue();
    vm.$watch( "属性", ()=>{ console.log("触发"):} ) ;
    2019-03-03 执行完$watch里的回调方法,目标值才会真正变化
    监听属性值变化触发 第二种方法
    var vm = new Vue({ el: '#computed_props', data: { kilometers : 0, meters:0 },
     
    watch : {
     
    kilometers:function(val) { this.kilometers = val; this.meters = val * 1000; },
     
    meters : function (val) { this.kilometers = val/ 1000; this.meters = val; } }
    class样式绑定
    样式绑定,可以绑字符串,也可绑对象
     
    可用computed实现可计算的样式绑定
    style样式绑定
    v-bind:>
     
    也可用
    浏览器vue插件
    Vue
    如何引用
    用<script>引入 Vue会被注册为一个全局变量
    生产环境 用明确版本
    cli
    为单页面应用快速搭建繁杂的脚手架
    vue
    一套用于构建用户界面的渐进式框架
    vue与其它框架的区别
    knockout支持ie6
    React有庞大的生态系统
    vue 和 react 的共同点
    1 都使用 virsual dom
    2 提供了响应式和组件化的视图组件
    3 注意力集中在核心库, 将其它功能如路由和全局状态管理交给其它库
     
    2019-03-03 个人感觉 双向绑定的事 不好加断点
     
    {{ message | capitalize }} 竖线是管道符 captitalize是定义在Vue里的过滤器 过滤器可以串联
    v-on的缩写
    <a @click='doSomething'></a>
    自定义组件
    Vue.component('runoob', {
    template: '<h1>自定义组件!</h1>'
    })
    自定义组件的模板
    // 注册
    Vue.component('child', {
    // 声明 props
    props: ['message'],
    // 同样也可以在 vm 实例中像 “this.message” 这样使用
    template: '<span>{{ message }}</span>'
    })
    自定义指令
    // 注册一个全局自定义指令 v-focus
    Vue.directive('focus', {
    // 当绑定元素插入到 DOM 中。
    inserted: function (el) {
       // 聚焦元素
       el.focus()
    }
    })
    路由
    可用来实现多视图的单页Web应用
     
    1 定义组件
    2 配置文件
    3 生成中控器
    5 挂载
    vue动画
    transition
    vue ajax
    有两种 get post
    reactive
    在控制台app.product可直接变更数据
    v-bind
    指令
    v-bind:title='message'
    将这个元素节点的title特性和Vue实例的message属性保持一致
    <p v-if='seen'>你现在看到我了</p>
    控制p标签的显示
    <li v-for='vo in products'>
    也许 in 和 of 都能用
    按钮点击
    <button v-on:click='reverseHandler'>逆转消息</button>
     
    所有的 Vue 组件都是 Vue 实例,并且接受相同的选项对象
    vm.a = data.a
    两边同时变
    阻止修改属性,并停止响应
    var obj = {
    foo:'bar'
    }
    Object.freeze(obj);
    new Vue({ el:'#app", data:obj})
    Vue的实例属性和方法
    vm.$data
    vm.$el
    vm.$watch('a', function(newValue, oldValue) ) ;
    有哪些生命周期钩子函数
    beforeCreate created
    beforeMount mounted
    beforeUpdate updated
    beforeDestroy destroyed
    钩子函数使用注意事项
    不要用箭头函数
    双大括号叫什么写法
    Mustache
    只能执行一次性插值
    v-once
    输出html
    <span v-html='rawHtml'></span>
    Mustache不能作用在html特性是怎么办
    <div v-bind:id=“dynamicId”></div>
    Mustache支持单语句 比如
    {{ message.split('').reverse().join('') }}
    v-bind的用法
    后接html的属性,可响应式地更新html特性,比如<a v-bind:href='url'></a>
    v-on
    用于监听Dom事件 <a v-on:click="doSomething"></a>
    v-bind动态参数的写法
    v-bind:[attributeName]
    v-bind:href的简写法
    :href
    v-on:click的简写法
    @click
    什么时候用计算属性
    对于复杂的逻辑,都应该用计算属性
    计算属性的语法
    data:{
        message:"Hello Vue"
    }
    computed:{
         reverseMesssage:function(){
              return this.message..... ;
         }
    }
    计算属性和方法各自的优点
    计算属性 有缓存 当依赖源变化时才会重新计算(缺点是它不是响应式依赖)
    方法 总会再次执行函数
    计算属性和侦听属性 类似计算 fullname = firstName + secondName 时用计算属性开销更小
    计算属性可设置 setter
     
    侦听器适合在什么时候用
    当需求在数据变化时执行异步 或 开销较大的操作时
    领会debounce的用法
    this.debouncedGetAnswer()
    this.debouncedGetAnswer = _.debounce(this.getAnswer, 500)
    绑定样式
    <div v-bind:class='{active:isActive}'></div>
    数组语法
    <div v-bind:class='[className1, className2]'/>
    v-bind:style
    <div v-bind:></div>
    条件渲染
    v-if v-else v-else-if v-show
    v-if 和 v-show 的区别
    v-if         切换开销高 ,适用于几乎不变的情况
    v-show   初始开销高(后续只靠css),适于于频繁切换
    <template v-if="loginType === 'username'">
    <label>Username</label>
    <input placeholder="Enter your username" key='name'>
    </template>
    <template v-else>
    <label>Email</label>
    <input placeholder="Enter your email address" key='email'>
    </template>
    注意不加key的时候  input label 都会被复用
    v-if 和 v-for 哪个优先级更高
    v-for 优先级更高
    怎么取 v-for 的 index
    v-for="(item, index) in items"
    v-for 里 in 和 of
    也许可以互相替换
    v-for 的 key
    <div v-for="item in items" :key="item.id">
    如果刷新array的一个元素
    Vue.set(vm.items, index, newValue)
    vm.items.splice( index, 1 , newValue ) ;
    Vue不能监听 属性的添加或删除
     
    添加响应式属性
    Vue.set( vm.Object, 'age', 24 ) ;
    vm.$set( vm.Object, 'age', 23 ) ;
    一次添加多个响应式属性
    vm.profile = Object.assign( {}, vm.profile, {age:10, name:'a'} ) ;
    修饰符有哪些
    stop prevent capture self once passive
    按键修饰符
    keyup.enter keyup.page-down
    按键码
    keyup.13
    keyup.enter
    keyup.tab
    keyup.delete
    keyup.esc
    keyup.space
    keyup.up
    keyup.down
    keyup.left
    keyup.right
    系统修饰符
    ctrl alt shift meta
    @click.ctrl
    只要有ctrl被按下就触发
    @click.ctrl.exact
    有且只有ctrl被按下时才触发
    @click.exat
    没有任何系统修改符被按钮下的时候才触发
    鼠标按钮修饰符
    left right middle
    表单输入绑定
    v-model 用于p textarea input-checkbox input-radio
    select
     
    有修饰符 .lazy .number .trim
    开始了解组件
    组件的data必须是一个函数
    因此每个实例可以维护一份被返回对象的独立的拷贝
    data: function () { return { count: 0 } }
    全局注册组件时 组件名的要求是
    推荐用kebab (短横线间隔命名)不能有大写字母
    定义组件的经验
    先注册 Vue.component
    画画<div>
    渲染 new Vue({el:"#app-1"}) ;
    向子组件传递数据
    props
    子组件向父组件传值
    父组件 v-on:enlarge-text="postFontSize += 0.1"
    子组件v-on:click=$emit('enlarge-text', 0.1)
    插槽
    slot
     
    <div id="app-10">
    <alert-box>
    Something bad happened
    </alert-box>
    </div>
     
    <script>
     
    Vue.component("alert-box", {
    template: `<div class="demo-alert-box">
    <strong>Error!</strong>
    <slot></slot>
    </div>`
    });
    动态组件
     
    不同组件之间进行动态切换
    v-bind:is = "AA"
     
    <component v-bind:is="currentTabComponent"></component>
    这个还需要翻墙看官方的例子
    组件如何全局注册
    Vue.component
    局部注册
    el:"#app"
    components:{
    }
    局部注册的组件在子组件里是不能用的
     
    要想用,得这样写:
    var ComponentB = {
        components:{
             'component-B'
        }
    }
    只全局注册这些非常通用的基础组件
    require.context
    静态props 和 动态props 
    动态的就是v-bind:aaa=""

    Prop 验证

    不看了,去看书吧
    全局自定义指令
    Vue.directive("focus", {
    inserted: function (el) {
    el.focus();
    }
    });
    // 不太理解
    局部自定义指令
    new Vue({
        el:"#app",
        directives:{
            focus:{
                inserted: function(el){
                     el.focus();
                } 
            }
        }
    })
      指令定义函数的钩子函数举例
    bind inserted update componentUpdated unbind
    bind
    只调用一次,指令每一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作
    inserted
    被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于ducuments中)
    update
    被绑定元素所在的模板更新时调用,而不论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新
    componentUpdated
    被绑定元素所在模板完成一次更新周期时调用
    unbind
    只调用一次,指令与元素解绑时调用。
    钩子函数的参数
    el 指令所绑定的元素,可以用来直接操作DOM
    binding 一个对象 包含以下属性
    name 指令名 不包含 v-
    value 指令的绑定值 
    oldValue 指令绑定的前一个值,仅在update和componentUpdated中使用
    expression 绑定值的表达式或变量变
    arg 传给指令的
    modifiers 一个包含修饰符的对象
    vnode
    Vue 编译生成的虚拟节点
    oldVnode
    上一个虚拟节点
    什么时候会用到自定义指令
    脑子就想到了一个 <input v-focus
    路由的作用
    实现多视图的单页Web应用 Single Page web application  SPAd 
    正在被导航的链接都会加上样式
    class="router-link-exact-active router-link-active" 
    router-link有用属性
    可带上 query 
    写法: <router-link :to="{path:'/bar', query:{plan:'private'}}">go to bar</router-link>
     
    replace 不保留上条路径的 history
    <router-link :to="{ path: '/abc'}" replace></router-link>
     
    append 在当前的路径基础上再行跳转
     
    让Router-link以什么形式显示
    <router-link :to="{ path: 'relative/path'}" tag="li" append>append</router-link>
     
    设置激活的router-link的样式 active-class = "_active"
    ._active{
       backgroud-color: red ;
    }
     
    设置当链接被精确匹配时应该激活的class
    exact-active-class 
    Vue 过渡 动画
    <transition name="fade">
    <p v-show="show" v-bind:style="styleobj">动画实例</p>
    </transition>
     
    没有看细节,先这样吧,不学了
    Vue 混入的作用
    定义了一部分可复用的方法或计算属性,
    混入对象可以包含任意组件选项。
    当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项。
    vue 混入的实例
    1 先定义混入对象
    2 定义混入的类 -> 实例类
    vue 混入的选项合并
    new Vue({ mixins:[myMixin]}) ; 
    混入的时候,mixin里的优先级高
    全局注册混入对象
    Vue.mixin({ created: function () { var myOption = this.$options.myOption if (myOption) { console.log(myOption) } } })
     
    new Vue({ myOption: 'hello!' })
    vue ajax的方法有哪些
    get head delete jsonp post put patch
    get( url, [options]).then( succssCbk, failCbk ) ;
    Vue 响应接口
    vm.$watch("counter", function(newValue, oldValue) 可用来监听字段变化
    Vue.set
    Vue.delete
     
    vue的各种常用库
    vuex 
    状态管理模式 
    Vue.use是什么意思
    Vue.use(Router) 等
    但 axios 不需要调用 Vue.use();
    import getCdnAvatar from "@/utils/getCdnAvatar.js";
    @是在webpack或者什么地方配置的,
    表示根目录
    Vue.config.productionTip = false;
    为true时 会有生产提示
    所以设为了 false
    Vue.filter() 定义过滤器的方法
    全局过滤器
    Vue.filter()
     
    组件过滤器
    filters:{
        capitalize:function(value){
             if() ... 怎么怎么样
        }
    }
    过滤器可以用到哪里
    双大括号里 或 v-model 里 
    el:"#app" 等于
    .$mount( "#app" ) ;
    render: h=>h(App) 的意思是直接把App渲染出来
     
    等于
    components: { App } 
     
    <App></App>
     
    添加实例属性
    Vue.prototype.$appName = '';
    这样 this.$appName 就可以访问了
    axios 执行一个 get 请求 
    Vue.prototype.$http = axios ;
    this.$http.get('https://jsonplaceholder.typicode.com/users').then( (response)=>{
    this.users = response.data ;
    })
    可以自己任意定义全局方法
    Vue.prototype.$reverseText = function( text ):String{
    }
    给select添加选项的方法
    var x = document.getElementById("select_movie")
    var c = document.createElement("option");
    c.text = vo.text ;
    x.options.add( c ) ;
     
    我是用google搜到的这地址
    fetch 
     
    带动画的图标
    svg
    加断点的方法
    debugger
    localStorage的使用方法
    localStorage.getItem( 'local_name') ;
    localStorage.removeItem('local_name');
    最好配合 mounted 和 watch 来用
     
     
     
     
     
     
     
  • 相关阅读:
    Python 3.6安装yaml时报"AttributeError: module 'pip' has no attribute 'main'"和“Non-zero exit code”错误
    Python 3.6版本中实现 HTMLTestRunner输出时”fp=file(filename,'wb')“报错
    LoadRunner录制脚本时没有响应——无法启动浏览器问题总结
    python中print不换行
    python中for循环的三种遍历方式
    python enumerate用法
    Python中添加中文注释报错SyntaxError: Non-UTF-8 code starting with 'xc1'
    pycharm 2017最新激活码
    设计模式之禅2之六大原则
    hibernate错误整理
  • 原文地址:https://www.cnblogs.com/jason-beijing/p/10660151.html
Copyright © 2011-2022 走看看