vue入门,错题集

vue学习的最好材料 :官方文档

知识点:

声明式渲染

  1.  vue应用  所有东西都是响应式的。
                        直接在控制器中修改   变量  的值 ,能看到相对应的更新
        问题:这样会不会不严谨,别有用心的人会不会直接找到变量然后修改数据?
  2.
        绑定元素特性:    1. 文本插值 {{ message }}    2.绑定元素属性特性  v-bind:title=”message“

条件与循环

v-if=""    v-for=""
    1.     数据可以绑定在:文本,属性,dom结构。
    2.     Vue  强大的过滤效果    在插入、更新、移除元素时  自动应用过滤效果

    

处理用户输入

v-on :事件监听  -->  v-on:click="function(){}"  -->方法写到methods里面
v-model="变量" -->实现表单输入和应用状态之间的双向绑定 -->input里面value值的双向绑定
v-once -->只执行一次 的插值,当数据改变时,插值处的内容不会更新。
注意:在方法中,我们更新应用状态,但没有触碰dom元素,所有的操作都有vue处理,编写的代码只需要关注逻辑层面就行。  ???
     我的理解:我们在方法中,修改变量或者状态,并没有去触碰dom元素,所有的操作由vue处理。----vue怎么处理,就不清楚了(我的理解不一定对,欢迎更正!!!)

* 组件化应用构造(vue思想)
抽象,组件(小型,独立,可复用),大型应用使用多个组件构成。-->组件树

ARE YOU READY?

创建一个实例  --> 所有Vue组件都是Vue实例
       var  vm= new  Vue({            经常用vm表示Vue的实例
                            //选项
                                       })

选项列表

数据与方法

值变化,视图也会变化    (实例创建,data中的所用属性都加到Vue的响应式系统)。

// 我们的数据对象
var data = { a: 1 }

// 该对象被加入到一个 Vue 实例中
var vm = new Vue({
  data: data
})

// 获得这个实例上的属性
// 返回源数据中对应的字段
vm.a == data.a // => true

// 设置属性也会影响到原始数据
vm.a = 2
data.a // => 2

// ……反之亦然
data.a = 3
vm.a // => 3
我的理解图例:
vue入门,错题集

理解:当我们定义的数据发生改变时,Vue实例中创建的data数据也会发生改变,视图也会发生变化。

<div id="app"> {{message.a}} </div><script src="../js/vue.js"></script><script> var data={a:'hello'}; var vm=new Vue({ el:'#app', data:{ message:data } })</script>
-----------》》
//结果:hello

控制台编写:
            data.a='vue'--》 "vue"
            vm.message.a='hello vue' --》"hello vue"
  
Object.freeze( )  ,会阻止修改现有的属性,意味着响应系统无法再追踪变化。
          Object.freeze( data )   ;视图将不会再根据我的  data.a赋值 或 实例赋值  发生变化

要是属性刚开始不存在时?  -->  方法 是    在data中设置一些初始值  ,让它变为存在的空值
    
Vue实例中的属性和方法,都有前缀 $ , 以便用户定义的属性区分开。
                    vm.$el       vm.$data

    生命周期钩子中的  this -->  调用它的Vue实例

   new Vue({
        data:{
            a:1
            },
        created : function(){    //不要在选项属性或回调上使用箭头函数 ,因为箭头函数是和父级上下文绑定在一起的,this不一定如你所预期的Vue实例。
               // 可以用来在一个实例被创建后执行的代码。
            }    
        })
            

* 生命周期图示  (重要   集中记住图片)

 vue入门,错题集

模板语法

        基于html的模板语法,允许开发者声明式的将DOM绑定至底层Vue实例的数据 (我认为这句话得好好理解,这是响应式声明的原因)。在底层的实现上,Vue将template里面的 标签字符串 编译成 虚拟的DOM函数,然后结合响应式系统,把template重新渲染,并把DOM操作次数减到最少。
        理解:DOM树元素与底层Vue实例的数据进行绑定。

   插值

        1.数据绑定     {{ message }}      {{ }} --> 双大括号会将数据解释为普通文本,非html代码    
        2. v-html --> 输出真正的Html代码
                       注意:不能用v-html来复合局部模板 ,因为 Vue不是基于字符串的模板引擎 
                                        组件更适合作为可重用和可组合的基本单位
                                                绝不要对用户提供的内容使用插值
        3.  使用javascript表达式
               {{number + 1}}    -->加减运算
                {{ ok ? 'yes' : 'no' }}  -->三目运算
               {{ message.split(' ').reverse( ).join(' ' ) }}     -->js方法运算
               <div v-bind:id="'list-' + id"></div>      -->  字符串的拼接
       注意:每个绑定都只能包含单个表达式。 只能访问全局变量的白名单   例如:Math和Date ,不能访问用户定义的全局变量。                                                                                                                                               

   指令     

      单个JavaScript表达式  (v-for是特例)
    职责:当表达式的值发生改变时,将影响DOM元素           
   1. 参数    
   2. 修饰符        
              <form v-on:submit.prevent="onSubmit">...</form>    
        .prevent 修饰符是告诉 v-on 指令对于触发的事件调用 event.preventDefault( )   
3. 缩写     
        v-bind:href=" " --> :href=" "
        v-on:click=" " --> @click="

计算属性和侦听器

计算属性

computed:{
            reverseMessage:function(){ ... }
}    
getter函数:Vue实例中属性值的获取    vm.reverseMessage。getter函数是没有副作用的    

计算属性缓存 vs 方法    

1.可以将同一函数定义为一个方法而不是一个计算属性,两种方式之间的最终结果确实是完全相同的。    
2. 不同:    
            计算属性是基于他们的依赖进行缓存的。    只有在它的相关依赖关系发生改变时才会重新求职。
            而   方法 总会再次执行函数。
    
计算属性缓存 vs 侦听属性 ( watch )

计算属性的setter

       计算属性默认只有getter  
                在需要时,可以自己设置一个setter 。
                    

侦听器    

      什么时候使用?--> 当数据变化时执行异步或开销较大的操作时。

   

用在组件上:    
     <my-component class="baz boo"></my-component>
    <my-component v-bind:class="{ active: isActive }"></my-component>
    

绑定内联样式       

    v-bind:style     是一个js对象,属性名用驼峰式或者横杆

v-for        

    数组:
           <p v-for="item in items"></p>    
            <p v-for="item of items"></p>    接近js迭代器
           <p v-for="(item,index) in items"></p>    
   对象:

            <li v-for="value in object"></li>

            <li v-for="(value,key) in object"></li>    

             <li v-for="(value,key,index) in object"></li>     
v-for和v-if一起被使用时,v-for的优先级更高    

列表渲染    

        

      

错题:

    1.new  Vue({ });          vue应该是大写开头,
                        报错:Uncaught ReferenceError: vue is not defined

    2.new Vue({

              el :" #app "            #忘写了额,记住el里面填写的是选择器
                      })
    3.犯了个傻错误,在methods方法中修改 data的值,忘记赋值。。。导致dom元素修改未成功
    4.  创建一个组建  


<ol>
    <todo-item></todo-item>
</ol>
<script src="../js/vue.js"></script>
<script>
    // 定义名为 todo-item 的新组件
    Vue.component('todo-item', {
        template: '<li>这是个待办项</li>'
    })
</script>

         为什么页面上没有显示上?
答:组建是要配和Vue实例的。   var vm=new Vue()  不然不知道渲染哪个地方