vue

cdn资源:http://www.bootcdn.cn/vue/

html css js和效果实时可以观看的页面编辑器:https://codepen.io/bhnddowinf/pen/KzNoay#0

vuejs目标是尽可能的实现响应的数据绑定和组合的视图组件

组件系统:独立可复用  衍生出组件数的概念

MVVM:view改变通过viewmodel传递给model;model改变也通过viewmodel传送给view

钩子函数:

生命周期:

 

自定义元素

1.双向绑定

v-model绑定的变量名要和文档中大括号绑定的变量名一致,才能达到两个变量的值同步的效果。

   <p>{{message}}</p>
    <input v-model="message">
View Code

2.列表循环v-for

3.逻辑判断指令v-if

  变量名设置布尔值(0/1)来实现dom操作

4.定义模板;注册组件

vue中对css和其他一样在模板中定义类名等定义即可。

        //页面结构自定义元素
        <app-nav></app-nav>
        //定义
        var appNav = Vue.extend({
            teamplate:'<div>appNav</div>'
        })
        //注册
        vue.component('app-nav',appNav)        
View Code

//创建实根例

new vue({el:'#app'})

5.构造器与实例

  属性和方法

vm.$data === data  //true

vm.$el === document.getElementById('example') //true

方法:$watch

vm.$watch("监听对象",function(newVal,oldVal){})

6.数据绑定

{{}}和{{{}}}的区别:三个大括号不会被解析,会原样输出

在vue1.0中数据绑定还有个特定的标签partial,但vue2.0被移除不多讲:

<body>
    <div id="app">
        <partial name="my-partial"></partial>
    </div>
</body>
<script>
    Vue.partial('my-partial','<p>this is a partial {{msg}}</p>');
    new Vue({
        el:"#app",
        data: {
            msg:'我是九门琪琪'
        }
    })
</script>
View Code

注意:这样的代码的安全性要注意,可能会遇到XSS攻击,恶意的代码被提交。

v-bind 缩写为 ‘:’

可以绑定表达式(注意:不可以绑定语句例如var a=1;等)

7.过滤器filter

内置过滤器 、自定义过滤器。

可连续过滤;

可传递参数:{{message | json 4}} 4个空格

自定义过滤器:

<body>
    <div id="app">
        <span v-text="msg | warp 'before' 'end'"></span>
    </div>
</body>
<script>
    Vue.filter('warp',function (value,begin,end) {
        return begin+value+end;
    })
    new Vue({
        el:"#app",
        data: {
            msg:'我是九门琪琪'
        }
    })
</script>
View Code

8.指令

v-if 、v-bind 、v-on 

9.计算属性computed

循环的利用

$watch    get和set:

this

lazy、number 、三元运算、 debounce(延时)

10.class和style的绑定

<body>
    <div id="app">
        <div v-bind:class="{'class-a':isA}">111111111</div>
    </div>
</body>
<script>
    new Vue({
        el:"#app",
        data: {
            isA:true
        }
    })
</script>
View Code

class绑定object、数组;

v-bind:style=""

<body>
    <div id="app">
        <div v-bind:style="{color:activeColor}">111111111</div>
    </div>
</body>
<script>
    new Vue({
        el:"#app",
        data: {
            activeColor:'red'
        }
    })
</script>
View Code

11.条件渲染

v-if和v-else    template    v-show  

注意:v-if不支持嵌套

12.列表渲染 

v-for in/of(of没有index)    

track by="$index"

$set    $remove    

 filterBy    orderBy

12.方法与事件处理

$event    script方法中:event.type....

stopPropgation    preventDefault

事件修饰符.stop  .prevent  

 v-on    @keycode.f1

13.表单控件和绑定

双向数据绑定:type CheckBox,radio

<body>
    <div id="app">
        <select name="" id="" multiple  v-model="selected">
            <option value="a" selected>A</option>
            <option value="b">B</option>
            <option value="c">C</option>
        </select>
        <span>Selected:{{selected | json}}</span>
    </div>
</body>
<script>
    new Vue({
        el:"#app",
        data: {
           selected: "C"
        }
    })
</script>
View Code

绑定value

CheckBox的v-model绑定的为toggle 

<body>
    <div id="app">
        <input type="checkbox" v-model="toggle" v-bind:true-value="a" v-bind:false-value="b">
        <pre>{{toggle}}</pre>
    </div>
</body>
<script>
    new Vue({
        el:"#app",
        data: {
            toggle:'',
              a:'太',
              b:"ba"
        }
    })
</script>
View Code

radio绑定v-bind:value="a"; data:{picked:'',a=''}

select绑定v-bind:value="{number:123} ";data:{selected:" "}

 14.组件

vue.extend()//创建组件构造器

vue.component(tag,constructor)//全局注册组件,挂在到tag,可重复利用

 is特性:也是可以进行模板的引入。特点是可以通过data动态的添加组件,将模板名绑定的进行动态变化。

注意:template不能在table中使用,一些标签的嵌套要规范,否则不能渲染,也不会报错

15.props

some-props和:some-props的区别:第一个会被解析为字符串,冒号绑定会被解析为数值。

prop绑定类型是单向绑定,防止子组件无意改变父组件,但也可以.sync和.once修饰符强制双向和单次绑定。

prop验证:只要有错,丢出检查机制。

16.$parent、$root、$children

this.$parent.$set("msg",this.msg); //vue.set的三个参数(改的变量,第几项,改成什么)

注意:尽量不要修改父组件和根组件的资料。

17.自定义事件

$on(“事件名”,回调)、$once:监听

$emit("执行事件名",参数):在他上面触发事件

$dispatch():广播至根组件,冒泡    注意:执行第一次回调会阻止冒泡,除非return true;

$broadcast:传播至所有后代

18.v-on绑定自定义事件

v-on:child-msg="父组件方法名";

19.子组件索引

v-ref

20.动态组件

keep-alive:动态组件被保留

activate钩子:只作用于动态组件切换或静态组件初始化

transition-mode:两个动态组件过渡(in-out、out-in)

编写可复用的组件:

异步加载:按需加载;

递归组件:

inline-teamplate内联模板:

21.data增加或修改如何改为响应式

JSON.stringify()

object.defineProperty()   writtable...

$log()

注意:vuejs不能检测到对象属性的增加和删除;vm.b=2等非响应式的不能做到双向绑定;vm.$set()和vue.set()是响应的

注意:vuejs很注意初始值,尽量设置初始值。

深拷贝   assign()

MutationObserver

异步更新队列:确定更新vue.nextTick()

$el

22.计算属性有缓存机制

关闭缓存:cache:false;get:fun()

23.

注意:vue2.0以后属性中不可以再使用mustache;已经被丢弃。

v-text    v-html

24.$emit

子组件在父组件中的自定义事件需要通过在该子组件中注册

方法名(){

  this.$emit("自定义事件名",参数);

}

25.与methods同级的watch方法

watch:function(val,oldVal){}

27.transition

<transition name="" mode="out-in">

  <div :is="comA" key="1"></div>

  <div :is="comA"  key="2"></div>

</transition>

可以挂:v-if、v-show、组件

注意:过渡的时候如果标签名相同是不会执行过渡的,需要制定key来解决

28.js控制动画

注意:先去除css的动画:css="false"

然后绑定beforeEnter(el);enter(el,done);leave

29.全局定义自定义指令(写到根实例里面new vue)

directive:fun(el,binding)

30.在全局的vue中引入jq

31.插件

引入vue-router:

在minin.js中import VueRouter from 'vue-router';注册Vue.use(VueRouter); 实例化let Router = new VueRouter();data中写入

router;

render:function(h){

  return h(App)

}

 h => h(App)

 引入vue-resource,只用注册不用实例化;然后在用的地方this.$http.get();

32.style的scoped标签在当前单文件组件中引用,否则全局引用。

实战2.0

1.npm i vue-cli -g

npm init webpack

npm i

npm run build

2.vuex

let store = new Vuex. Store({

  state: {

    totalprice:0
  },

  mutations: {

    increment(state,price){

      state.totalprice+=price
    },
    getters: {

      gettotal(state){

        return state.totalprice
      }
    },
    decrement(state,price){

      state.totalprice-=price
    },
    actions:{

      increase(context,price){

        context.commit("increment",price)
      }
    }
  }

})
View Code

vuex中文网:https://vuex.vuejs.org/zh-cn/

mudules对store进行了分类

3.

 

 

 

 

 

 

 

 

 

 

注意methods常见js方法:

this.    split()    reverse()    join()    trim()    .keyup    .enter    unshift    shift    push    pop    splice    sort    concat    match       indexof

JSON.parse

添加: push()

删除:splite(index,1)

 

posted @ 2017-07-27 20:30  九门提督琪琪  阅读(266)  评论(0编辑  收藏  举报