這個Demo 相關JS:
Sea.js : Version 2.3.0
seajs-text : Version 2.3.0
vue.js : Version 1.0.24
vue-router: Version 0.7.10
jquery: Version 1.0.24
特別是 seaj-text,一定需要引用,否則,require 相關HTML文件會報錯。
結構圖如下:
index.html 核心代碼如下
<div id="app"> <menu> </menu> <router-view> </router-view> </div> <script type="text/javascript"> seajs.config({ base:"./static", charset:'utf-8', map:[], paths:{} }); $(function(){ seajs.use(["js/app.js"]); }); </script>
app.js 設定路由,默認啟動的js.
define(function(require,exports,module){ require("js/components/menu.js"); /* 路由器需要一個根組件*/ var App=Vue.extend({}); //創建一個路由器實例 var router=new VueRouter(); router.map({ '/':{ component:function(resolve){ require.async(['js/modules/Index.js'],resolve); } }, '/teacher/:params1/:params2':{ /*name:"teacher",*/ component:function(resolve){ require.async(['js/modules/teacher.js'],resolve); } }, '/student':{ component: function (resolve) { require.async(['js/modules/student.js'],resolve); } } }); router.start(App,'html'); router.afterEach(function(transition){ console.log(transition.to.path); }); });
在modules 下面的js負責相關邏輯,比如顯示界面,
define(function (require, exports, module) { var sTpl = require('templates/student.html'); require("js/components/myCom.js"); var vueComponent = Vue.extend({ template: sTpl, attached: function () { var t = this; $("#btn1").click(function () { t.msg="dom change" }); }, methods:function(){ }, data:function(){ return{ msg:"Bar page", myComData:"自定義組件的數據" } } }); module.exports=vueComponent; });
student.html代碼如下
<div> <h3>this bar page</h3> <div> {{msg}} </div> <my-com></my-com> </div>
其中 <my-com></my-com> 是自定義組件,代碼如下:
define(function(require,exports,modul){ Vue.component('myCom',Vue.extend({ template:'<h1>我的自定義組件</h1>'+ '<p>' + ' {{myComData}}' + '<button v-on:click="myCommonBtnClick">自定義組件</button>'+ '</p>', replace:true, data:function(){ return{ myComData:"初始化自定義組件值" } }, methods:{ myCommonBtnClick:function(){ this.myComData="改變后自定義組件值"; } } })); });
整個運行效果圖如下:
整個代碼點擊這里可下載,如果用 webStrom啟動,則不需要配置服務器。