既然用Vue,就不要用jQuery了,你這個(gè)需求需要使用動態(tài)模板(dynamic template),步驟這樣:
1 需要用vue的full版本(包括compiler),而不僅是runtime版本,在webpack配置中需要增加一個(gè)alias,類似
vue: 'vue/dist/vue.js'
2.然后在模板文件中,使用下面的方式來嵌入動態(tài)模板
<component :is="dynamicTemplate()" />
dynamicTemplate函數(shù)需要返回處理好的模板內(nèi)容,類似:
return Vue.compile('<div>' + dynamicContent +'</div>')
之所以再套一個(gè)div,是因?yàn)閂ue的模塊需要單根。如果在動態(tài)模板內(nèi)容中依賴一些組件,這些組件需要提前注冊好,可以使用vue的全局模塊注冊。
存放echarts的容器寬高的問題,調(diào)試一下看看容器的寬高是多少?窗口變化的時(shí)候,寬高怎么變
item.name==='tom' && item.address==='河北' && item.age > 24這個(gè)百度上面有教如何webpack配置sass的
webpack.config.js要配置scss-loader
還有
<style lang=“scss”>
因?yàn)閒n是個(gè)匿名函數(shù)
舉個(gè)簡單例子
var obj = {
fn1: function() {
console.log(this);//此處輸出obj本身
var noNamed = function() {
console.log(this);//此處輸出windowd對象
};
return noNamed();
}
};
obj.fn1();
以上,你的var fn=function(){};再return fn()本質(zhì)上就是個(gè)直接調(diào)用的匿名函數(shù)閉包 return function(){}
你只是將這個(gè)匿名函數(shù)賦值給fn了,并不能改變他沒函數(shù)名的本質(zhì)
結(jié)論:只要是匿名函數(shù),this就指向window全局對象,例如:
function foo() {
var fn = setTimeout(function() { //我是匿名函數(shù)
console.log(`setTimeout的this不會隨foo改變:${this.age}`);
}, 0);
}
foo.call({
age: '1000'
});//輸出undefined這是傳 props 值,把方法作為值傳遞給組件,不是綁定方法。
原來我連題意都沒有理解,都沒有弄清最長回文子序列是啥
config 文件夾的 index.js,修改 build 配置項(xiàng):
module.exports = {
dev: {
// ...
assetsSubDirectory: 'static',
assetsPublicPath: '/',
// ...
},
build: {
// ...
assetsRoot: path.resolve(__dirname, '../../dist'),
assetsSubDirectory: 'static',
assetsPublicPath: `${settings.cdn}/`,
// ...
}
}你是想監(jiān)聽input value 為空呢?
你對這個(gè)React頁面對應(yīng)的地址啟用 google自動翻譯了?
之前回答別人的問題,Vue 全選 單選問題,
既然用Vue了就操作數(shù)據(jù),盡量不操作DOM。
寫了個(gè)小demoVue 全選單選問題,右擊查看源碼,可供參考。
<template>
<div id="app">
<a target="_blank">SF上的Vue 全選 單選問題</a>
<ul>
<li class="checked-item" @click="singleSelect(row, index)" v-for="(row, index) in goods">
<input type="checkbox" :checked="row.checked"/>{{row.name}}
</li>
</ul>
<div>
<span @click="allSelect">
<input type="checkbox" :checked="isAllSelected"/>
<button>全選</button>
</span>
<span class="checked-count" v-if="checkedGoodIds.length > 0">已選擇:{{checkedGoodIds.length}}項(xiàng)</span>
</div>
</div>
</template>
<script>
new Vue({
data: {
goods: [{
id: 1,
name: '選項(xiàng)1-xuanyuan1',
checked: false
}, {
id: 2,
name: '選項(xiàng)2-xuanyuan2',
checked: false
}, {
id: 3,
name: '選項(xiàng)3-xuanyuan3',
checked: false
}, {
id: 4,
name: '選項(xiàng)4-xuanyuan4',
checked: false
}, {
id: 5,
name: '選項(xiàng)5-xuanyuan5',
checked: false
}, {
id: 6,
name: '選項(xiàng)6-xuanyuan6',
checked: false
}],
},
computed:{
// 是否全選
isAllSelected(){
return this.goods.every((el) => {
return el.checked;
})
},
// 選中商品的id
checkedGoodIds(){
let filterArr = this.goods.filter((el) => {
return el.checked;
});
return filterArr.map((el) => {
return el.id;
})
}
},
methods: {
// 全選、全不選
allSelect() {
let checked = true;
// 全選
if(this.isAllSelected){
checked = false;
}
this.goods = this.goods.map(el => {
el.checked = checked;
return el;
})
},
// 單選
singleSelect(row, index) {
row.checked = !row.checked;
this.goods.splice(index, 1, row);
}
}
}).$mount('#app')
</script>setState會觸發(fā)子組件的重新計(jì)算vdom,但是不一定會重新更新dom
const str="1232{按鈕1}{按鈕2}765432";
const result=str.split(/(?=\{)|(?<=})/g);
//?["1232", "{按鈕1}", "{按鈕2}", "765432"]
然后把數(shù)字字符串轉(zhuǎn)成數(shù)字。
result.map(str=>{let num=parseInt(str); if(num)return num; return str;});
使用了向前匹配和向后匹配,看這篇
可以用函數(shù)處理,逐個(gè)字符串進(jìn)行判斷。
最好自己嘗試實(shí)現(xiàn)以下這個(gè)函數(shù)...
const str = "1232{按鈕1}{按鈕2}765432";
function handleStr(str) {
const result = [];
//表示是否在處理花括號內(nèi)的字符
let inBraceNow = false;
for (let i = 0; i < str.length; i++) {
const currentChar = str[i];
if (inBraceNow) {
result[result.length - 1] += currentChar;
if (currentChar == "}") {
inBraceNow = false;
}
} else {
//遇到"{"開始進(jìn)入花括號處理階段...
if (currentChar == "{") {
result.push("{");
inBraceNow = true;
} else {
// result數(shù)組為空時(shí),需要初始化
//如果數(shù)組最后一個(gè)不能轉(zhuǎn)為數(shù)字,說明是剛進(jìn)入數(shù)字處理階段,需要傳入一個(gè)0
if (result.length == 0||(!+result[result.length-1])) {
result.push(0);
}
result[result.length - 1] =10*result[result.length - 1]+(+currentChar);
}
}
}
return result;
}
console.log(handleStr(str));
CSS:before and after
直接用<hr/>標(biāo)簽即可。
然后設(shè)置一下css
hr {
-moz-border-bottom-colors: none;
-moz-border-image: none;
-moz-border-left-colors: none;
-moz-border-right-colors: none;
-moz-border-top-colors: none;
border-color: #EEEEEE -moz-use-text-color #FFFFFF;
border-style: solid none;
border-width: 1px 0;
margin: 18px 0;
}filter: blur(0px);
改為
filter: none;
可以解決問題。
<script src="/js/plupload.full.min.js"></script>
<script src="https://cdn.staticfile.org/qi...;></script>
componentDidMount(){
this.initQiniu();
}
initQiniu(){
var _this = this;
var uploader = Qiniu.uploader({
runtimes: 'html5,flash,html4', // 上傳模式,依次退化
browse_button: 'pickfiles', // 上傳選擇的點(diǎn)選按鈕,**必需**
uptoken_url: 'url to fetch token', // Ajax 請求 uptoken 的 Url,**強(qiáng)烈建議設(shè)置**(服務(wù)端提供)
get_new_uptoken: false, // 設(shè)置上傳文件的時(shí)候是否每次都重新獲取新的 uptoken
unique_names: true, // 默認(rèn) false,key 為文件名。若開啟該選項(xiàng),JS-SDK 會為每個(gè)文件自動生成key(文件名)
domain: 'xxx', // bucket 域名,下載資源時(shí)用到,**必需**
container: 'container', // 上傳區(qū)域 DOM ID,默認(rèn)是 browser_button 的父元素,
max_file_size: '100mb', // 最大文件體積限制
flash_swf_url: 'path/of/plupload/Moxie.swf', //引入 flash,相對路徑
max_retries: 3, // 上傳失敗最大重試次數(shù)
dragdrop: true, // 開啟可拖曳上傳
drop_element: 'container', // 拖曳上傳區(qū)域元素的 ID,拖曳文件或文件夾后可觸發(fā)上傳
chunk_size: '4mb', // 分塊上傳時(shí),每塊的體積
auto_start: true, // 選擇文件后自動上傳,若關(guān)閉需要自己綁定事件觸發(fā)上傳,
init: {
'FilesAdded': (up, files) => {
plupload.each(files, function(file) {
// 文件添加進(jìn)隊(duì)列后,處理相關(guān)的事情
});
},
'BeforeUpload': (up, file) => {
// 每個(gè)文件上傳前,處理相關(guān)的事情
},
'UploadProgress': (up, file) => {
// 每個(gè)文件上傳時(shí),處理相關(guān)的事情
this.setState({
isUploading: true,
});
},
'FileUploaded': (up, file, info) => {
const domain = window.domain;
const res = JSON.parse(info);
const sourceLink = domain + res.key; //獲取上傳成功后的文件的Url
this.setState({
fileUrl: sourceLink,
isUploading: false
});
},
'Error': (up, err, errTip) => {
//上傳出錯(cuò)時(shí),處理相關(guān)的事情
},
'UploadComplete': () => {
//隊(duì)列文件處理完畢后,處理相關(guān)的事情
},
}
});
}
render(){
return(
<div id="container">
<div id="pickfiles">上傳</div>
</div>
)
}
//解決第三方軟鍵盤喚起時(shí)底部input輸入框被遮擋問題
var bfscrolltop = document.body.scrollTop;//獲取軟鍵盤喚起前瀏覽器滾動部分的高度
$("input.inputframe").focus(function(){//在這里‘input.inputframe’是我的底部輸入欄的輸入框,當(dāng)它獲取焦點(diǎn)時(shí)觸發(fā)事件
interval = setInterval(function(){//設(shè)置一個(gè)計(jì)時(shí)器,時(shí)間設(shè)置與軟鍵盤彈出所需時(shí)間相近
document.body.scrollTop = document.body.scrollHeight;//獲取焦點(diǎn)后將瀏覽器內(nèi)所有內(nèi)容高度賦給瀏覽器滾動部分高度
},100)
}).blur(function(){//設(shè)定輸入框失去焦點(diǎn)時(shí)的事件
clearInterval(interval);//清除計(jì)時(shí)器
document.body.scrollTop = bfscrolltop;將軟鍵盤喚起前的瀏覽器滾動部分高度重新賦給改變后的高度
});
[看看這個(gè)] https://blog.csdn.net/github_...
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。