Vue.js 最初是爲 Web 平臺設計的,雖然能夠基於 Weex 開發原生應用,可是 Web 開發和原生開發畢竟不一樣,在功能和開發體驗上都有一些差別,這些差別從本質上講是原生開發平臺和 Web 平臺之間的差別,能夠經過《Weex 和 Web 平臺的差別》瞭解更多細節和緣由。css
因爲運行平臺存在差別,Weex 不支持 Vue 中與 DOM 相關的功能:html
.prevent
、.capture
、.stop
、.self
等事件修飾符在原生環境中無心義。.{keyCode | keyAlias}
修飾符在原生環境中無心義。vm.$el
獲取界面元素,原生環境中沒有 DOM Element。vm.$mount
,默認會將入口組件掛載到原生應用的視圖中。v-html
和 v-text
指令。Vue 除了提供默認的完整包之外,還提供一個更小巧的 vue.runtime.js
,在這個文件中移除了模板編譯的相關操做,Weex 中也僅引入 Vue Runtime 的功能,這樣作除了能夠減小代碼體積之外,還能減小運行期編譯模板的負擔,提高性能。vue
具體的差別有:webpack
template
屬性。x-templates
。Vue.compile
。Weex 在原生端使用的是「多頁」的實現,不一樣的 js bundle 將會在不一樣的原生頁面中執行;也就是說,不一樣的 js bundle 之間將不一樣共享 js 變量。即便是 Vue
這個變量,在不一樣頁面中也對應了不一樣的引用。git
基於這個特性,Vue 中全局功能將只在當前頁面內生效:github
Vue.config
Vue.component
Vue.directive
Vue.filter
Vue.mixin
Vue.use
注:以上接口的功能並未受影響,只是其生效範圍將會限制在同一頁面內。web
Web 中的 CSS 很是的靈活,積累了特別多的屬性,支持多種佈局方法;這是其優點,也是瀏覽器性能優化的一個瓶頸。瀏覽器
Weex 中的樣式是由原生渲染器解析的,出於性能和功能複雜度的考慮,Weex 對 CSS 的特性作了一些取捨,使其更符合最佳實踐。性能優化
Weex 中只支持單個類名選擇器,不支持關係選擇器,也不支持屬性選擇器。weex
/* 支持單個類名選擇器 */
.one-class {
font-size: 36px;
}
/* 不支持關係選擇器 */
.parent > .child {
padding-top: 10px;
}
/* 不支持屬性選擇器,不支持 `v-cloak` 指令 */
[v-cloak] {
color: #FF6600;
}
|
這個只是對樣式定義的限制,不影響樣式類名的使用,在標籤中能夠添加多個樣式類名,如:
<template>
<div class="one two three"><div>
</template>
|
在 Weex 中,寫在組件 <style>
裏的樣式只能用在當前組件中,默認是 scoped
做用域。爲了保持和 Native 的一致性,建議在 .vue
文件中寫樣式時,加上 scoped
屬性,即: <style scoped>
。
Weex 支持的樣式特性是 CSS 的子集,而且會不斷擴充;在實現過程當中咱們參考了 CSS 屬性在瀏覽器中的使用頻率,優先實現其中頻率最高的一些屬性。
Weex 支持了基本的盒模型和 flexbox 佈局,以及其餘經常使用樣式,詳情可參考Weex 通用樣式文檔。
在編寫樣式時,還應該注意一下幾點:
display: none;
,所以也不支持 v-show
指令。border
、border-(top|bottom|left|right)
margin
padding
flex
在 Weex 中使用 Vue.js ,你所須要關注的運行平臺除了 Web 以外還有 Android 和 iOS ,在開發和編譯環境上還有一些不一樣點。針對 Web 和原平生臺,將 Vue 項目源文件編譯成目標文件,有兩種不一樣的方式:
.vue
格式的單文件組件;也就是說,目前只能使用 Webpack + weex-loader 來生成原生端可用的 js bundle。weex-loader 是 Webpack 的一個加載器,使用方法參考其官方文檔。須要提醒的是,若是 Webpack 配置的入口文件是個 .vue
格式的文件的話,還須要額外傳遞 entry
參數,一般設置爲 true
,表示將當前組件做爲入口組件。爲了能正常匹配 .vue
文件,Webpack 配置文件中 weex-loader 的匹配規則也須要有所調整。
module.exports = {
// 針對 .vue 文件要添加 entry 參數
entry:
'./path/to/App.vue?entry=true',
// 其餘配置項 ...
module: {
loaders: [{
// 匹配包含了 entry 參數的 .vue 文件路徑
test:
/\.vue(\?[^?]+)?$/,
loaders: ['weex-loader']
}]
},
}
|
若是使用 .js
文件做爲 Webpack 配置的入口文件,則不須要額外配置這些參數,咱們推薦使用 Javascript 文件做爲編譯的入口文件。
Weex 項目生成的是原生應用,學習一些開發原生應用的基礎知識,會對你開發 Weex 項目頗有幫助。參考《集成 Weex 到已有應用》瞭解更多信息。