现在网上抄的沸沸扬扬的VUE看来是个很NB的东西啊,看了一下,确实相对于angular1来说简化了不少东西,性能方面也比angular1要好很多,所以现在用的人越来越多了,于是作为前端,学习一下新东西不至于被淘汰那是必须的~在网上看了一下,感觉还不错,打算用它写个单页面应用。于是……坑就跟着来了……

  首先声明本人不会webpack和es6但是看了一下网上用VUE写单页面程序的基本上都是用的webpack和ES6,他大爷的!这就有点欺负人了!不会什么非用什么?就不能做一个简简单单的前端吗?非要用什么NPM(虽然装这node但是不想用)。于是就走上了传统道路的VUE之旅,用require写VUE。百度了一下,网上用require写VUE的还真不多,于是把自己用require写VUE的过程写出来,帮助那些跟我一样,不会webpack和ES6又想用VUE的人。好了言归正传,上代码!

先来看看require的入口JS吧!

 require.config({
paths:{
"text":"text",
"jquery":"jquery",
"vue":"vue",
"vueRouter":"vue-router",
"common":"common",
"iview":"iview.min",
"element":"element"
},
waitSeconds:3
});
require(['common','jquery','vue','vueRouter','iview'],function(common,$,Vue,VueRouter,iview){
Vue.use(VueRouter);
Vue.use(iview);
var router=new VueRouter({
routes:[
{
path:'/foo',
component:common.ob
},
{
path:'/bar/:id',
component:{
template:'<div>bar{{$route.params.id}}</div>'
}
},
{
path:'/home',
component:{
template:'<div>这是HTME页面</div>'
}
},
{
path:'*',
redirect:"/home"
}
]
}); common.load();
common.load2();
var vm=new Vue({
el:"#app",
data:{
text:"这是一个测试页面!"
},
components:{
"ceshi":common.ob
},
methods:{
zouni:function(){
this.$router.push('/bar/哎呦我去!')
}
},
router:router
}); });

  配置文件就不用说了,如果连require也不会的话就先去学学require吧!这里不再赘述了~我这里引用了vueRouter作为单页面的路由,其中我还引入了JQuery,有人说VUE不能和JQ一起使用,但是经过实验是可以的!这里还涉及到了两个前端的UI库,一个是iview,一个是element,虽然看上去差不多,但是具体用起来还是有区别的,这里就以iview为例介绍一下吧(这两个UI库是不能混用的,否则会有意想不到的“惊喜”)!再有一点要说明的就是我用的require和VUE的版本号,都是2.0以上的,我看网上有很多把VUE写到require的shim里面去的,其实是不用的!VUE2.0是支持AMD的!包括它的插件vueRouter和iview都支持!所以shim是不用的!而且我用的JQ是1.9的,也是支持AMD的,这一点来说的话个大库的公司还是有一致性的!

  如果看不懂vueRouter建议先去学一下,这里也不再赘述,其实路由都差不多,学一下就会了,不懂的可以给我留言!教程地址:https://router.vuejs.org/zh-cn/api/route-object.html。好了,这个部分代码没有什么别的好说的了,都是一些正常的使用,学过VUE的应该都能看懂,接下来重点说说第14行和15行,这里用到了Vue.use()方法,从官网的查询来看,说的是在引入VUE插件的时候需要用到这个方法,但是如果直接在页面引用VueRouter路由文件,则不需要,所以这里是个坑,刚开始写的时候我也弄了半天才弄明白,其次是第15行,iview,这个可能有人要说了,这不跟VueRouter是一个意思嘛,确实是一个意思,但是这里有个坑!在引入iview的时候有一个大坑!那就是引入iview时,第5行的vue引入命名必须为小写的vue!这个真是个坑爹货!本来我是打算跟官方保持一直大写V的,结果引入VueRouter没问题,但是引入iview的时候报错了,真是气人!

  好了说完了主文件再来看看模块吧!

 define(["vue","text!../vuetemp/1.html","text!../vuetemp/2.html","iview"],function(Vue,templates,templates2,iview){
function load(){
Vue.component("load",{
template:templates,
data:function(){
return {
abc:123
}
}
});
}
function load2(){
Vue.component("load2",{
template:templates,
data:function(){
return {
abc:456
}
},
methods:{
zouni:function(){
this.$router.push('/bar/哎呦我去!')
}
}
});
}
var ob={
template:templates2,
data:function(){
return {
visible:false,
movieList: [
{
name: '肖申克的救赎',
url: 'https://movie.douban.com/subject/1292052/',
num:1,
rate: 9.6
},
{
name: '这个杀手不太冷',
url: 'https://movie.douban.com/subject/1295644/',
num:2.5,
rate: 9.4
},
{
name: '霸王别姬',
url: 'https://movie.douban.com/subject/1291546/',
num:2.5,
rate: 9.5
},
{
name: '阿甘正传',
url: 'https://movie.douban.com/subject/1292720/',
num:2.5,
rate: 9.4
},
{
name: '美丽人生',
url: 'https://movie.douban.com/subject/1292063/',
num:2.5,
rate: 9.5
},
{
name: '千与千寻',
url: 'https://movie.douban.com/subject/1291561/',
num:2.5,
rate: 9.2
},
{
name: '辛德勒的名单',
url: 'https://movie.douban.com/subject/1295124/',
num:2.5,
rate: 9.4
},
{
name: '海上钢琴师',
url: 'https://movie.douban.com/subject/1292001/',
num:2.5,
rate: 9.2
},
{
name: '机器人总动员',
url: 'https://movie.douban.com/subject/2131459/',
num:2.5,
rate: 9.3
},
{
name: '盗梦空间',
url: 'https://movie.douban.com/subject/3541415/',
num:2.5,
rate: 9.2
}
],
randomMovieList: []
}
},
methods:{
show:function(){
this.visible=true;
},
changeLimit:function() {
function getArrayItems(arr, num) {
const temp_array = [];
for (let index in arr) {
temp_array.push(arr[index]);
}
const return_array = [];
for (let i = 0; i<num; i++) {
if (temp_array.length>0) {
const arrIndex = Math.floor(Math.random()*temp_array.length);
return_array[i] = temp_array[arrIndex];
temp_array.splice(arrIndex, 1);
} else {
break;
}
}
return return_array;
}
this.randomMovieList = getArrayItems(this.movieList, 5);
}
},
mounted () {
this.changeLimit();
}
}
return {
load:load,
load2:load2,
ob:ob
}
});

  这里因为没法用.vue文件,所以只能这么写了,就是引入模板,然后再在下面配置组件的各种属性方法等等,然后封装成一个object,然后传出去,在路由的地方使用,或者直接注册进全局的VUE里面,然后上面的两个是定义的一个全局组件,直接在主文件中调用就OK了,可以看一下文章开头那段代码的41和42行。

  接下来就是最重要的模板了(要不是为了方便引入模板,我才不用require呢)~

 <div>
<div>远程加载的模板!{{abc}}</div>
<ul>
<li>{{$route.params.id}}</li>
<li @click="zouni">2</li>
<li>3</li>
<li>4</li>
</ul>
</div>
 <div>
<Card style="width:350px">
<p slot="title">
<Icon type="ios-film-outline"></Icon>
经典电影
</p>
<a href="#" slot="extra" @click.prevent="changeLimit">
<Icon type="ios-loop-strong"></Icon>
换一换
</a>
<ul>
<li v-for="item in randomMovieList">
<a :href="item.url" target="_blank">{{ item.name }}</a>
<span>
<!-- <Rate disabled v-model="item.rate/2"></Rate>
<Icon type="ios-star" v-for="n in 4" :key="n"></Icon>
<Icon type="ios-star" v-if="item.rate >= 9.5"></Icon>
<Icon type="ios-star-half" v-else></Icon> -->
<Rate allow-half v-model="item.num"></Rate>
{{ item.num }}
{{ item.rate }}
</span>
</li>
</ul>
</Card>
<i-button @click="show">Click me!</i-button>
<Modal v-model="visible" title="Welcome">欢迎使用 iView</Modal>
</div>

  这两段就是模板文件,直接引入之后加入进去就行了,虽然不能用.vue文件,但是有个好处就是我们可以直接拿HTML来用~而且还支持语法提示和高亮!也算是一种补偿吧~

  好了,到这里大家就应该知道如何通过require来使用VUE了吧~如果有什么不明白的大家也可以留言,我会及时回复大家的~最后提示一下就是用require+VUE+vueRouter+iview的方法来写项目的话会有点大~因为光这些JS+CSS就已经1M多了~如果再加上本身项目的业务逻辑我估计一个项目下来最少也要几十M,所以想好好用VUE的话还是学习一下webpack和ES6吧!

如何在require中使用VUE的更多相关文章

  1. chrome中安装Vue调试工具vue-devtools

    一.前言 vue-devtools是一款基于浏览器的插件,用来调试vue应用.本篇文章将要总结的是如何在chrome中安装Vue的调试工具vue-devtools. 首先能想到的第一种方法就是直接在c ...

  2. 如何在嵌套的app中运用vue去写单页面H5

    本文主要介绍移动端.为了避免移动端兼容出现各种奇奇怪怪的bug,所以秉承着能不用复杂的语法就不用,尽量用最基础的语法. 可用惯了各种ES6语法的童鞋们,写原生真是头疼,再加上各种领导催工期,肯定是内心 ...

  3. Laravel 如何在blade文件中使用Vue组件

    Laravel 如何在blade文件中使用Vue组件 1. 安装laravel/ui依赖包 composer require laravel/ui 2.生成vue基本脚手架 php artisan u ...

  4. 如何在 Rails 中搭配 Turbolinks 使用 Vue

    [Rails] Vue-outlet for Turbolinks 在踩了 Rails + Turbolinks + Vue 的許多坑後,整理  的作法並和大家分享. Initialize the A ...

  5. 如何在webpack开发中利用vue框架使用ES6中提供的新语法

    在webpack中开发,会遇到一大推问题,特别是babel6升级到babel7,要跟新一大推插件,而对于安装babel的功能就是在webpack开发中,vue中能够是用ES6的新特性: 例如ES6中的 ...

  6. webpack 中导入 vue 和普通网页使用 vue 的区别(四)

    一:在普通网页中使用 vue 使用 script 标签,引入 vue 包 在 ndex 页面中,创建一个 id 为 App 的 div 容器 通过 new Vue 得到一个 vue 实例 二:在 we ...

  7. Electron-vue实战(三)— 如何在Vuex中管理Mock数据

    Electron-vue实战(三)— 如何在Vuex中管理Mock数据 作者:狐狸家的鱼 本文链接:Vuex管理Mock数据 GitHub:sueRimn 在vuex中管理mock数据 关于vuex的 ...

  8. 【TypeScript】如何在TypeScript中使用async/await,让你的代码更像C#。

    [TypeScript]如何在TypeScript中使用async/await,让你的代码更像C#. async/await 提到这个东西,大家应该都很熟悉.最出名的可能就是C#中的,但也有其它语言也 ...

  9. 如何在Vue2中实现组件props双向绑定

    Vue学习笔记-3 前言 Vue 2.x相比较Vue 1.x而言,升级变化除了实现了Virtual-Dom以外,给使用者最大不适就是移除的组件的props的双向绑定功能. 以往在Vue1.x中利用pr ...

随机推荐

  1. 2017-4-26 winform 菜单和工具栏

    如何让radiobutton进行分组: 用Panel    相当于div 菜单和工具栏: MenuStrip(菜单条) ShortcutKeys-------------------------与菜单 ...

  2. 【算法系列学习】Dijkstra单源最短路 [kuangbin带你飞]专题四 最短路练习 A - Til the Cows Come Home

    https://vjudge.net/contest/66569#problem/A http://blog.csdn.net/wangjian8006/article/details/7871889 ...

  3. javascript中的==与===

    一.主要区别: 1.通俗的来说,==是值的比较,而===不仅仅比较值,还比较引用的是否是同一个对象. 2.用==来比较的时候,如果两个数的操作数的类型不一样,会先转换.而===的操作数则不会进行任何转 ...

  4. php函数每日学习二十个

    数学函数 1,abs() 求绝对值 2,ceil() 进一法取整 3,floor() 舍去法取整 4,fmod()对浮点数进行取余 例如fmod(5.7,1.3) 5,pow() 返回数的n次方 po ...

  5. MarkDown本地图片上传工具制作总结

    引言:开始尝试使用MarkDown语法写文档,发现图片必须用外链的形式才能插入到文章中,而自己平时最常用的插入图片方式就是QQ截屏,觉得很不方便所以制作的小工具辅助上传,因为时间和水平有限,其实代码写 ...

  6. Hive篇之安装

    1,安装 hive的版本的选择,是选择内置的数据库保存元数据,还是用外部的mysql之类的数据库保存元数据,同时,如果使用外置的mysql,需要注意对mysql远程访问的配置. 再就是关于文件的配置了 ...

  7. Object-C iOS纯代码布局 一堆代码可以放这里!

    前言: 最近写的文章都是创业类,好吧,今天好好写写技术类的文章! 不过分享的不是IOS相关的文章,毕竟这几天在速成IOS,看的是object-c,由于速成的很快,好累! 好在现在基本已经入了点门道了, ...

  8. Tomcat--各个目录详解(二)

    Tomcat整体目录: 一.bin文件(存放启动和关闭tomcat脚本) 其中.bat和.sh文件很多都是成对出现的,作用是一样的,一个是Windows的,一个是Linux. ① startup文件: ...

  9. Node.js~ioredis处理耗时请求时连接数瀑增

    回到目录 关于redis连接数过高的解释 对于node.js开发环境里,使用传统的redis或者使用ioredis都是不错的选择,而在处理大数据请求程中,偶尔出现了连接池( redis服务端的最大可用 ...

  10. 利用gulp搭建简单服务器,gulp标准版

    var gulp = require('gulp'), autoprefixer = require('gulp-autoprefixer'), //自动添加css前缀 rename = requir ...