vue1.0学习(持续更新)

Posted 执候

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue1.0学习(持续更新)相关的知识,希望对你有一定的参考价值。

 

vue

一片html代码配合上json,new出来vue实例

 

Demo:1

数据双向绑定(v-model="message",{{message}})

 

<div id="box">
  <input type=\'text\' v-model="message">
  <p>{{message}}</p>
</div>

 

var c=new Vue({

 

  el:\'#box\',    //el为挂载点,可以是class,id,元素

 

  data:{

 

    message:\'hello world!\'

 

  }

 

})

Demo:2

v-for

循环数组

<div id="box">

<ul>

<li v-for="arr in arrs">

{{arr}}  {{$index}}

</li>

</ul>

</div>

var c=new Vue({

el:\'#box\',//class,id,元素度可以

data:{

arrs:[\'apple\',\'banana\',\'orange\',\'pear\'],

jsons:{a:\'apple\',b:\'banner\',c:\'car\'}

}

})

循环对象

1:

<div id="box">

<ul>

<li v-for="json in jsons">

{{json}}  {{$index}} {{$key}}

</li>

</ul>

</div>

2:

<div id="box">

<ul>

<li v-for="(k,v) in jsons">

{{k}}  {{v}} {{$index}}

</li>

</ul>

</div>

结果

Demo3:

v-on:(跟事件)click

methods 绑定事件方法

<div id="box">
  <input type="button" value="按钮" v-on:click="add()">
  <br/>
  <ul>
    <li v-for="arr in arrs">
      {{arr}} {{$index}}
    </li>
    <li v-for="json in jsons">
      {{json}} {{$index}} {{$key}}
    </li>
  </ul>
</div>

var c=new Vue({
  el:\'#box\',//class,id,元素度可以
  data:{
    arrs:[\'apple\',\'banana\',\'orange\',\'pear\'],
    jsons:{a:\'apple\',b:\'banner\',c:\'car\'}
  },
  methods:{
    add:function(){
    this.arrs.push(\'tomato\');
    }
  }
})

 Demo4

v-show  true/false

<div id="box">
  <input type="button" value="按钮" v-on:click="a=false">
  <div style="width:100px;height:100px ;background:red" v-show="a">
  </div>
</div>

var c=new Vue({
  el:\'#box\',//class,id,元素度可以
  data:{
    a:true
  }
})

v-show来控制显示隐藏

Demo5

 简易留言板编写

<div class="container" id="box">
<form role="form">
<div class="form-group">
<label>用户名:</label>
<input type="text" id="username" class="form-control" placeholder="输入用户名" v-model="username">
</div>
<div class="form-group">
<label>年龄:</label>
<input type="text" id="username" class="form-control" placeholder="输入年龄" v-model="age">
</div>
<div class="form-group">
<input type="button" value="添加" class="btn btn-primary" v-on:click="add()">
<input type="reset" value="重置" class="btn btn-danger">
</div>
</form>
<hr/>
<table class="table">
<caption class="h2 text-info">用户信息表</caption>
<tr class="text-danger">
<th class="text-center">序号</th>
<th class="text-center">名字</th>
<th class="text-center">年龄</th>
<th class="text-center">操作</th>
</tr>
<tr class="text-center" v-for="item in myData">
<td>{{$index+1}}</td>
<td>{{item.name}}</td>
<td>{{item.age}}</td>
<td>
<button class="btn btn-primary btn-sm" data-toggle="modal" data-target="#layer" v-on:click="nowIndex=$index">删除</button>
</td>
</tr>

<tr v-show="myData.length!=0">
<td colspan="4" class="text-right">
<button class="btn btn-danger btn-sm" data-toggle="modal" data-target="#layer" v-on:click="nowIndex=-2">删除全部</button>
</td>
</tr>
<tr v-show="myData.length==0">
<td colspan="4" class="text-center text-muted">
<p>暂无数据....</p>
</td>
</tr>
</table>
<!--弹出框-->
<div role="dialog" class="modal" id="layer" data-index="{{nowIndex}}">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">
<span>&times;</span>
</button>
<h4 class="modal-title">确认删除么?</h4>
</div>
<div class="modal-body text-right">
<button data-dismiss="modal" class="btn btn-primary btn-sm">取消</button>
<button data-dismiss="modal" class="btn btn-danger btn-sm" v-on:click="deleteMsg(nowIndex)">确认</button>
</div>
</div>
</div>
</div>
</div>

vue

var c=new Vue({
el:\'#box\',
data:{
myData:[],
username:\'\',
age:\'\',
nowIndex:-100
},
methods:{
add:function(){
this.myData.push({
name:this.username,
age:this.age
});
this.username=\'\';
this.age=\'\';
},
deleteMsg:function(n){
if(n==-2){
this.myData=[];
}
this.myData.splice(n,1);
}
}
})

、******************************************************************************

列:颜色切换

<style>.red{color:\'red\'}  .blue:{color:\'blue\'}</style>

<strong :class="{red:a,blue:b}"  @click="changeColor"></strong>

new Vue({

  el:\'#app",

  data:{

    a:true,

    b:false

  },

  methods:{

    changeColor:function(){

      this.a=!this.a,

      this.b=!this.b

    }

  }

})

列jsonp传递

<div id="box">
<input type="text" v-model="t1" @keyup="get()">
<ul>
<li v-for="value in myData">
{{value}}
</li>
</ul>
<p v-show="myData.length==0">暂无数据...</p>
</div>

new Vue({
  el:\'body\',
  data:{
    myData:[],
    t1:\'\'
  },
  methods:{
    get:function(){
      this.$http.jsonp(\'https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su\',

      {
        wd:this.t1
      },{
        jsonp:\'cb\'
    }).then(function(res){
      this.myData=res.data.s;
     },function(){

    });
  }
  }
});

、***************************************************************************

 

 

二事件深入

v-on:click   简写 @click

事件对象:

@click="show($event)"

阻止冒泡

ev.cancleBubble=true

@click.stop 

阻止默认事件

.prevent

常用回车键

@keyup.enter
上下左右
@keyup/keydown.left

三属性

v-bind:src=""

v-bind:src 简写:src 

<div id="box">
<img v-bind:src="url" alt="">
</div>

var c=new Vue({
  el:\'#box\',
  data:{
    url:\'https://www.baidu.com/img/bd_logo1.png\',

  }
});

1、:class="[red]"

2、:class="{red:true}"

3、:class="json"  

 data:{

  json:{red:a,blue:false}

}

style

:style="[c]"

模板

{{msg}}   数据更新模板化

{{msg}}  数据更新模板变化

{{*msg}}  数据只绑定一次

{{{msg}}} html任意输出

过滤器

{{msg|filterA}}

{{msg|filterA|filterB}}

uppercase

lowercase

capitalize

{{12 | curreny}} $12

{{12 | curreny \'¥\'}} $12

第二个参数是修改

 

  四交互 v-resource

get

请求文本

new Vue({

  el:\'#box\',

  data:{},

  methods:{

    get:function(){

      this.$http.get(\'a.txt\').then(function(res){

        alert(res.data);

      },function(res){

        alert(res.status);

      });

    }

  }

})

给服务器发送请求

new Vue({

  el:\'#box\',

  data:{},

  methods:{

    get:function(){

      this.$http.get(\'get.php\',{

        a:1,

        b:20

      }).then(function(res){

        alert(res.data);

      },function(res){

        alert(res.status);

      });

    }

  }

})

post

var c=new Vue({
el:\'#box\',
data:{

},
methods:{
  get:function(){
    this.$http.post(\'post.php\',{
    a:1,
    b:20
  },{
    emulateJSON:true //这个相当于post的头文件
  }).then(function(res){
    alert(res.data);
  },function(res){
    alert(res.status)
  });
  }
}
});

jsonp

先获取接口

https://sug.so.360.cn/suggest?callback=suggest_so&encodein=utf-8&encodeout=utf-8&format=json&fields=word&word=a

https://sug.so.360.cn/suggest?callback=suggest_so&word=a

var c=new Vue({
el:\'#box\',
data:{

},
methods:{
get:function(){
this.$http.jsonp(\'https://sug.so.360.cn/suggest\',{
wd:\'a\'
},{
jsonp:\'cb\'
//这个相当于post的头文件
}).then(function(res){
alert(res.data);
},function(res){
alert(res.status)
});
}
}
});

 微博搭建

vue生存周期

v-cloak防止闪烁

<style>
[v-cloak]{
  display:none;
}
</style>

<span>{{msg}}</span>

<span v-text="msg"></span>

<span>{{{}msg}}}</span>

<span v-html="msg"></span>

上面两种结果一样的,就是效果上后面这种自带闪烁

 

  钩子函数

  created  -> 实例已经创建

  beforeCompile ->编译之前

  compiled ->编译之后

  ready -> 加载完成 插入到文档中

beforeDestroy ->销毁之前

destroyed ->销毁之后

var vm=new Vue({
  el:\'#box\',
  data:{
    a:1
  },
  computed:{
    b:{
      get:function(){//默认写法
        return this.a+2;
      },
      set:function(val){//当赋值是
        this.a=val;
         }
    }
  }
});

 

vm.$el ->就是元素el

vm.$data ->就是data

vm.$mount(\'#box\') //手动挂载

vm.$options  ->获取自定义属性

vm.$detroy ->销毁对象

遇到循环的数据,你想要展示,最好在html中加入

track-by="$index"

var vm=new Vue({

  aa:11,  //自定义属性

  data:{

    a:1

  }

}).$mount(\'#box\');

vm.$options.aa   //就可以访问了

 

过滤器

| debounce 2000  延迟

数据配合使用过滤器

limitBy 参数(取几个) 从哪开始

filterBy 过滤

orderBy 排序

自定义过滤器

Vue.filter(name,function(){

  alert();

})

<div id="box">
  {{a|toDou}}
</div>

Vue.filter(\'toDou\',function(input){
  return input<10?\'0\'+input:\'\'+input;
})
var vm=new Vue({
  el:\'#box\',
  data:{
    a:9
  }
});

过滤html标记

自定义指令

Vue.directive(指令名称,function(){

  

})

指令名称 v-red 只能写red

指令必须以v-开头

自定义元素指令

Vue.elementDirective(\'zns-red\',{
  bind:function(){
    this.el.style.background=\'red\';
  }
});

<zns-red></zn-sred>

 监听数据变化

vm.$watch()

vm.$watch(\'a\',function(){
  alert(\'发生变化\');
});

五、bower包管理器

在指定文件打开cmd

npm install bower -g 

bower install vue

他会给你安装最新的,如果不想要可以删除bower uninstall vue

 bower install vue#版本号(1.0.28)

 bower info vue 可以查看版本信息

 vue 过渡(动画)

本质走的css3:transition,animation

<div id="div1" v-show="bSign" transition="fade"></div>

动画:
.fade-transition{

}
进入:
.fade-enter{
opacity: 0;
}
离开:
.fade-leave{
opacity: 0;
transform: translateX(200px);
}

列:

<div id="box">
<input type="button" value="按钮" @click="toggle">
<div id="div1" class="animated" v-show="bSign" transition="bounce"></div>
</div>

var c=new Vue({
el:\'#box\',
data:{
bSign:true
},
methods:{
toggle:function(){
this.bSign=!this.bSign;
}
},
transitions:{//定义动画
bounce:{
enterClass:\'zoomInLeft\',
leaveClass:\'zoomOutRight\'
}
}
})

 

组件

组件: 一个大对象
定义一个组件:
1. 全局组件
var Aaa=Vue.extend({
template:\'<h3>我是标题3</h3>\'
});

Vue.component(\'aaa\',Aaa);

*组件里面放数据:
data必须是函数的形式,函数必须返回一个对象(json)

2,局部组件

 

2. 局部组件
放到某个组件内部

var Aaa=Vue.extend({
  template:\'<h3>{{msg}}</h3>\'
  data:function(){
    return {
      msg:\'我是标题\'
    }
  },
});


var vm=new Vue({
  el:\'#box\',
  data:{
    bSign:true
  },
  components:{ //局部组件
    aaa:Aaa
  }
});

另一种编写方式:
Vue.component(\'my-aaa\',{
template:\'<strong>好</strong>\'
});

var vm=new Vue({
  el:\'#box\',
  components:{
    \'my-aaa\':{

      data:function(){

        return{

          msg:\'2222\'

        }

      },

      methods:{

      },
      template:\'<h2>{{msg}}</h2>\'
    }
  }
});

配合模板:
1. template:\'<h2 @click="change">标题2->{{msg}}</h2>\'

2. 单独放到某个地方
a). <script type="x-template" id="aaa">
<h2 @click="change">标题2->{{msg}}</h2>
</script>
b). <template id="aaa">
<h1>标题1</h1>
<ul>
<li v-for="val in arr">
{{val}}
</li>
</ul>
</template>

多个组件切换 动态组件

<div id="box">
<input type="button" @click="a=\'aaa\'" value="aaa组件">
<input type="button" @click="a=\'bbb\'" value="bbb组件">
<component :is="a"></component>
</div>

var vm=new Vue({
el:\'#box\',
data:{
a:\'aaa\'
},
components:{
\'aaa\':{
template:\'<h2>我是aaa组件</h2>\'
},
\'bbb\':{
template:\'<h2>我是bbb组件</h2>\'
}
}
});

vue-devtools   ->调试工具

 

组件数据传递: √
1. 子组件就想获取父组件data
在调用子组件:
<bbb :m="数据"></bbb>

子组件之内:
props:[\'m\',\'myMsg\']

props:{
\'m\':String,
\'myMsg\':Number
}

2. 父级获取子级数据
*子组件把自己的数据,发送到父级

vm.$emit(事件名,数据);

v-on: @

 slot位置、槽口

 重点

vue->SPA应用,单页面应用

v-resource  交互

v-router     路由  0.7.13

主页 home

新闻页 news

html:
<a v-link="{path:\'/home\'}">主页</a> 跳转链接

展示内容:
<router-view></router-view>

 

<div id="box">
<ul>
<li>
<a v-link="{path:\'/home\'}">主页</a>
</li>
<li>
<a v-link="{path:\'/news\'}">新闻</a>
</li>
</ul>
<div>
<router-view></router-view>
</div>
</div>

<script>
//1,准备根组件
var App=Vue.extend();

//2准备Home和Neews组件
var Home=Vue.extend({
template:\'<h3>我是Home</h3>\'
})

var News=Vue.extend({
template:\'<h3>我是News</h3>\'
})

//3.准备路由
var router=new VueRouter();

//4.关联
router.map({
\'home\':{
component:Home
},
\'news\':{
component:News
}
})
//5启动路由
router.start(App,\'#box\');
//6跳转
router.redirect({
\'/\':\'/home\'
})
</script>

路由嵌套

<template id="home">
<h3>我是主页</h3>
<div>
<a v-link="{path:\'/home/login\'}">登录</a>
<a v-link="{path:\'/home/reg\'}">注册</a>
</div>
<div>
<router-view></router-view>
</div>
</template>

 

router.map({
\'home\':{
  component:Home,
  subRoutes:{
    \'login\':{
      component:{
        template:\'<strong>我是登录</strong>\'
      }
    },
    \'reg\':{
      component:{
        template:\'<strong>我是注册</strong>\'
      }
    }
  }
},
\'news\':{
  component:News
}
})

路由的其他信息

/detail/:id/age/:age

{{$route.params | json}} -> 当前参数

{{$route.path}} -> 当前路径

{{$route.query | json}} -> 数据

六 vue-loader

其他loader ->  css-loader、url-loader、html-loader.....

nodejs ->require exports

broserify 模块加载,只能加载js

webpack 模块加载器,一切东西都是模块

require(\'style.css\'); ->   css-loader、style-loader

vue-loader基于webpack

.vue文件放置

放置的是vue组件代码

<template>

html

</template>

<style>

</style>

<script>

js

</script>

简单目录

index.html

main.js  入口文件

App.vue  vue文件

package.json  工程文件(项目依赖、名称、配置)

  npm init --yes 生成

webpack.config.js  webpack的配置文件

 

ES6: 模块化开发
导出模块:
export default {}
引入模块:
import 模块名 from 地址

webpak准备工作:
cnpm install webpack --save-dev
cnpm install webpack-dev-server --save-dev

App.vue -> 变成正常代码 vue-loader@8.5.4
cnpm install vue-loader@8.5.4 --save-dev

cnpm install vue-html-loader --save-dev

vue-html-loader、css-loader、vue-style-loader、
vue-hot-reload-api@1.3.2

babel-loader
babel-core
babel-plugin-transform-runtime
babel-preset-es2015
babel-runtime

 

路由:
vue-router

-> 如何查看版本:
bower info vue-router

路由使用版本: 0.7.13
配合vue-loader使用:
1. 下载vue-router模块
cnpm install vue-router@0.7.13
2. import VueRouter from \'vue-router\'

3. Vue.use(VueRouter); //

4. 配置路由
var router=new VueRouter();
router.map({
路由规则
})
5. 开启
router.start(App,\'#app\');

注意:
之前: index.html -> <app></app>
现在: index.html -> <div id="app"></div>

App.vue -> 需要一个 <div id="app"></div> 根元素

home news
---------------------------------------------
路由嵌套:
和之前一模一样
--------------------------------------------
上线:
npm run build
-> webpack -p
--------------------------------------------
脚手架:
vue-cli——vue脚手架
帮你提供好基本项目结构

本身集成很多项目模板:
simple 个人觉得一点用都没有
webpack 可以使用(大型项目)
Eslint 检查代码规范,
单元测试
webpack-simple 个人推荐使用, 没有代码检查 √

browserify -> 自己看
browserify-simple

--------------------------------------------
基本使用流程:
1. npm install vue-cli -g 安装 vue命令环境
验证安装ok?
vue --version
2. 生成项目模板
vue init <模板名> 本地文件夹名称
3. 进入到生成目录里面
cd xxx
npm install
4. npm run dev

 

以上是关于vue1.0学习(持续更新)的主要内容,如果未能解决你的问题,请参考以下文章

深度学习相关阅读论文汇总(持续更新)

深度学习相关阅读论文汇总(持续更新)

Python 学习.. 将持续更新...

转载:Go学习图谱(持续更新,最新更新于2021/11/29)

学习Swift -- 数组(Array) - 持续更新

MongoDB学习——持续更新