vue

作者: Ddragon_f8ea | 来源:发表于2018-11-30 15:33 被阅读0次

    一般什么情况下使用Vue?

          一般是需要开发SPA应用程序的时候去用,可以使用它开发大型的SPA单页面应用程序。vue是渐进式的,Vue其实可以融入到不同的项目中

    Object.defineProperty(user,'age',{ get(){ return 123}, set(){ } } ) 以get得到的值为主

    ①vue的安装及使用

    npm install vue

    页面引入vue.js,    <script src='node_modules/vue/dist/vue.js'></script>

    var vue1 = new Vue({ el:      data: { }  methods:{ } }) ;


    ②vue条件渲染

    当需要按条件控制渲染多个元素的时候,可以把他们都放到template这个特殊的标签中,vue会识别它,在渲染的结果中不会包含template

    ③自定义指令

    什么时候需要封装自定义指令:操作dom的时候封装自定义指令,当你需要进行一些底层dom操作的时候更为方便

    3.1. 注册一个全局自定义指令

    Vue.directive('focus', {

      // 当被绑定的元素插入到 DOM 中时……

      inserted: function (el) {

        // 聚焦元素

        el.focus()

      }

    })

    使用这个指令时   ‘v-focus’ 

    el 是 根据指定的dom元素的变化而变化 在指令钩子中,函数内部的this是window

    3.2 . 局部自定义指令

    directives:{

          girlClass: function(){},     // 简写方式:自动应用到 binding 和 update 两个钩子   

                                                 //  在渲染的时候要  v-girl-class;

    }

    directives : {

          girlClass: {

          bind:function(){},

    inserted:function(){}

          }

    }

    ④vue中的指令

    A. v-cloak <div v-cloak> {{msg}} </div> v-cloak 在编译结束之前不会显示 msg

              使用v-cloak要先加样式  [v-cloak] { display:none; } 当vue解析完dom模板后这个样式会自动去除。

    B. v-html    渲染html时如果发现有script标签则不渲染。目的是为了防止XSS攻击

    C. vue-if 和 v-show      vue-if 才是真正的条件渲染,false则移除这个dom,  v-show都会渲染,是通过控制样式 display:none;

      v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好

    D. v-once  被v-once包裹的元素都不会再更新了    <div  v-once> <h1>{{msg}}</h1>  <h2>{{msg}}</h2></div>

    E. v-pre    <div  v-pre> <h1>{{msg}}</h1> </div>  原样输出 {{msg}} Vue不处理带有 v-pre指令的DOM元素

    ⑤ vue的生命周期

    A. befordCreate : 未拿到 el 和 data等

    B. created : 未拿到 el , 拿到了 data 但还未把数据渲染到 dom元素里 , created钩子是最早能拿到data中的数据的钩子

    C. beforeMount :  拿到el,拿到了 data 但还未把数据渲染到 dom元素里

    D. mounted : 拿到el,拿到了 data 数据已经渲染到 dom元素里

    I . errorCaptured  :钩子级别的错误捕获, 捕获组件中发生的错误

    ⑥ watch 默认只监视一层,若要让其深度监视需要加

    watch:{

        todos: {

              handler: function ( newVal, oldVal) { localStorage.setItem( 'todos', JSON.stringify(val) ) },

              deep : true,

        }

    }

    ⑦vue-router

    A. 当你使用路由的时候,需要告诉路由匹配到的组件往哪里渲染 <router-view></router-view>这里渲染

    B. 推荐使用 <router-link to='/foo'>go to foo </router-link> 跳转, 默认渲染成 a 链接 <a href='#foo'>go to foo </a>

    注意: B.1  也可以通过配置让它渲染成别的属性    <router-link to='/foo'  tag='li' >go to foo </router-link>  等于  <li>go to foo</li>

    B.2  点击这个链接标签时会自动添加一个样式类class  router-link-active

    B.3  关于自动添加类名,它有一个包含匹配规则,如果一个  /foo      则/ 和 /foo 都会同时加上这个类名  加上exact解决这个包含问题

            <router-link to='/foo'  exact  tag='li' >

    C. 配置路由表  var Foo = { template:'<div>'我是Foo</div> }

          var router = new VueRouter( { routes:[ { path:'/foo',component:Foo }, ]} ) 

          new Vue( {el:"" , router})

    url传值:  <router-link to=“`/crud/update?id=${item.id}`”>编辑</router-link> 

    在/crud/update页面通过  const {id}  =  this.$route.query  拿到route和router  , this.$router访问到的是路由实例对象,this.$route访问到的是路由参数对象

    ⑧ vue 热更新 (浏览器不刷新也能更新数据)

    在webpack.config.js里配置 const webpack = require('webpack')

                                                    在 devServer:{  hot:true }

    在 Plugins: [ new webpack.NamedModulesPlugin()

      new webpack.HotModuleReplacementPlugin()

    ]

    相关文章

      网友评论

          本文标题:vue

          本文链接:https://www.haomeiwen.com/subject/yvkhcqtx.html