/** * 组件增加belongTo属性后会获取归属模块状态码 0正常 1不显示 * */ Vue.mixin({ beforeCreate(){ let opt = this.$options,attrs=this.$attrs,module=opt.belongTo || attrs.belongTo; opt.computed= opt.computed ||{}; if(module){ opt.computed.modules=mapState({modules:state => state.restriction.modules}).modules; opt.computed.module=()=>{ return module}; opt.computed.moduleStateCode=()=>{ return this.modules[this.module] || 0}; // 这里的originalRender实际上取到的是opt.__proto__.render,给opt.render赋值会遮蔽原型上的render
// 在Vue单文件组件打包过程中被vue-loader编译时,tempalte就被输出为render函数,VueComponent的$option继承了我们定义的组件选项对象,所以这里才能够在beforeCreate阶段取到render
let originalRender=opt.render; opt.render=function () { let _vm = this;return _vm.moduleStateCode == 1 ? _vm._e() : originalRender.apply(this,[].slice.call(arguments)); } } }, mounted(){ let module=this.$options.belongTo || this.$attrs.belongTo; if(module){ this.$watch("moduleStateCode",(val)=>{}) } } });
组件增加自定义属性:belongTo 在组件选项里或添加在$attr里