鍍金池/ 問答/HTML/ js自定義模塊export 和vue 的mixin有什么區(qū)分點(diǎn)?

js自定義模塊export 和vue 的mixin有什么區(qū)分點(diǎn)?

我的想法是vue 的mixin也可以寫成js自定義模塊export,然后import進(jìn)來
都是代碼復(fù)用
但是我把mixn改成js模塊,出現(xiàn)了一個(gè)大問題

vue.esm.js?efeb:1741 TypeError: Cannot read property 'components' of undefined
    at checkComponents (vue.esm.js?efeb:1330)
    at mergeOptions (vue.esm.js?efeb:1451)
    at mergeOptions (vue.esm.js?efeb:1467)
    at Function.Vue.extend (vue.esm.js?efeb:4803)
    at createComponent (vue.esm.js?efeb:4203)
    at _createElement (vue.esm.js?efeb:4420)
    at createElement (vue.esm.js?efeb:4357)
    at vm._c (vue.esm.js?efeb:4489)
    at Proxy.render (eval at ./node_modules/vue-loader/lib/template-compiler/index.js?{"id":"data-v-0ffbc2a2","hasScoped":true,"transformToRequire":{"video":["src","poster"],"source":"src","img":"src","image":"xlink:href"},"buble":{"transforms":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/news/detail/comment/Item.vue (app.js:7208), <anonymous>:144:13)
    at VueComponent.Vue._render (vue.esm.js?efeb:4544)

過程是我用js模塊方法返回的結(jié)果作為組件顯示與否v-if

//lib.js
let checkIsLogin= async function(){     
    const res = await  api.auth.current({});
    return res.isLoggedIn;     
};
//componnts.vue
lib.checkIsLogin().then(function(res){               
    this.replying =  res;
})

<child v-if="replying "></child>
回答
編輯回答
兔寶寶

mixin 也是 js,但是mixin 寫的是 vue 組件的混合,vue 組件中的屬性如 methods、computed、data 等都可以使用mixin 來進(jìn)行復(fù)用,本質(zhì)和 js 沒什么區(qū)別,比如你有一個(gè)公共的方法,你也可以寫一個(gè)js 文件 export 出去一個(gè)方法,然后在某個(gè) vue 組件中引用,但是這么做比較曲折,不如直接寫 mixin 來的方便,而且寫成mixin 中的 method,在這個(gè)方法里還可以直接訪問組件實(shí)例中的變量,可以引用組件等。

2017年10月5日 13:08