使用 https://github.com/ctrlplusb/...
以DashLeft為例:
上邊的這個(gè)js改為:
import './style/main.css';
import React from 'react';
import { asyncComponent } from 'react-async-component';
import DashCenter from './component/Center';
import Right from './component/Right';
const AsyncDashLeft = asyncComponent({
resolve: () => import('./component/Left'),
LoadingComponent: () => <div>載入中...</div>
});
class DisplayScreen extends React.Component {
constructor(props) {
super(props);
this.state = {
data:'',
currentComponent:null
}
}
handleKeyDown(event){
// 將停止事件的傳播
event.stopPropagation();
// 阻止元素發(fā)生默認(rèn)的行為
event.preventDefault();
//console.log('點(diǎn)擊鍵盤(pán)事件');
}
promptWarm = () => {
require.ensure(['../../components/warmDialog'], (require) => {
const Message = require('../../components/warmDialog');
this.setState({
currentComponent:<Message />
})
},'promptWarm')
}
componentDidMount() {
let this_ = this;
let date = '';
if(ENV['displayScreen'].topic) {
let dateWS = '';
Util.ws(ENV['displayScreen'].topic, ENV['displayScreen'].interval, returnData=> {
dateWS = returnData;
this.setState({data:dateWS})
});
}
else
{
import('../../../../public/mockJson/kim-001/kim-001.json').then(data=>{
//import('../../../../public/mockJson/kim-001/kim-001.json').then(data=>{
this.setState({data:data})
});
}
}
render() {
return (
<div id="appDash">
<span onClick={this.promptWarm} >
按需加載模塊
</span>
{this.state.currentComponent}
{
this.state.data?
<div >
<AsyncDashLeft data={this.state.data}/>
<DashCenter data={this.state.data}/>
<Right data={this.state.data}/>
</div>:''
}
</div>
);
}
}
export default DisplayScreen;估計(jì)服務(wù)器上有木馬了,建議重做系統(tǒng),最好用linux
能不能換個(gè)思路 通過(guò)mixin獲取到的text1 不通過(guò)組件直接顯示
個(gè)人猜測(cè)是node_modules中的大部分依賴(lài)都已經(jīng)被編譯成了ES5,如:attr-accept,再次編譯的話(huà)就會(huì)報(bào)樓主的錯(cuò)!因此在webpack配置文件的load中使用include將node_modules排除,即不編譯node_modules這個(gè)文件夾下的文件。
我是這樣解決的。以上。
fileState(pathname, function(res) {
if (res) {
//如果是一個(gè)文件,發(fā)送200響應(yīng)
response.writeHead(200);
// 將文件流導(dǎo)向res
fs.createReadStream(pathname).pipe(response);
} else {
// 當(dāng)是一個(gè)目錄的時(shí)候如何讓程序自動(dòng)尋找index.html default.html(問(wèn)題在這里?)
response.writeHead(200);
// 將文件流導(dǎo)向res
fs.createReadStream(pathname+'/index.html').pipe(response);
}
})WTForms本身既可以用來(lái)渲染html控件,可以單獨(dú)用來(lái)驗(yàn)證表單,如果要支持JSON,可以用1樓的hack。
我推薦你用flask_wtf,這個(gè)插件,這個(gè)插件是對(duì)wtfoms的進(jìn)一步封裝,支持form,也支持json,CSRF,文件上傳。我在項(xiàng)目里,頁(yè)面渲染和WebService都是用的這個(gè)插件。
例子:form.py
from flask_wtf import FlaskForm
from wtforms import StringField, IntegerField
from wtforms.validators import Length, StopValidation
class MyForm(FlaskForm):
# 字段
name = StringField(validators=[Length(min=1, max=20, message="name長(zhǎng)度需在1-20個(gè)字符間")])
name2 = IntegerField()
# 自定義驗(yàn)證
def validate_age(self, field):
# 根據(jù)name2查詢(xún)model
# ......
model = None
if not model:
# StopValidateion不需要自己捕捉
raise StopValidation("name2信息不存在")
view.py
@app.route('/api/get_obj_info', methods=["GET", "POST"]):
def get_obj_info():
form = MyForm()
if request.method == "GET":
return jsonify({
# xxxxx
})
# validate_on_submit 會(huì)自動(dòng)調(diào)用“validate_字段”這些驗(yàn)證方法
# 驗(yàn)證失敗后返回表單驗(yàn)證的錯(cuò)誤消息
if form.validate_on_submit():
return jsonify({
"status": "success",
"msg": "xxxx"
})
# 驗(yàn)證未通過(guò)
return jsonify({
"status": "failed":
"msg": "xxxx",
"error": form.errors
})
前臺(tái)POST數(shù)據(jù):
{
name: "小明",
name2: "管理"
}1.代碼邏輯問(wèn)題在
self.fields = "";
這個(gè)只會(huì)訪(fǎng)問(wèn)'fields'這個(gè)成員而不是參數(shù)定義的fields
改為 self[fields]才能操作
2.你的做法需要vue實(shí)例一開(kāi)始建立初始化數(shù)據(jù)的fields有才能得到監(jiān)聽(tīng)。
你所訪(fǎng)問(wèn)的this.xxx,事實(shí)上是vue自身代理出來(lái)的實(shí)例“快捷方式”。
使用vue的時(shí)候多考慮一下數(shù)據(jù)驅(qū)動(dòng)的思路。不要為了封裝而封裝。
3.不要使用alert,alert會(huì)全局阻塞
1.你不需要顯示初始值,你寫(xiě)他干啥?你直接寫(xiě)空字符串不就行了!
2.你可以使用v-show v-if 去控制。
3.你的意思是要一個(gè)默認(rèn)值嗎?你可以默認(rèn)值是‘’,然后 {{name.length > 0 ? name : 'default'}}
你在你的gulpfile文件里面把你的引入代碼壓縮的gulp插件和生成hash值的gulp插件的代碼注釋掉重新運(yùn)行g(shù)ulp就行了
你的代碼里是給ctx.width賦值,而can才是canvas元素
$img.load(function() {
var can = $('<canvas>').get(0);
var ctx = can.getContext('2d');
can.width = this.width; //之前這里用的是ctx
can.height = this.height;
$('.main').append($(can));
ctx.drawImage(this, 0, 0, can.width, can.height); //之前這里用的是ctx
});頁(yè)面加載狀態(tài)readyState
下次遇到這種情況,要么找回來(lái),要么下個(gè)新的,在新的里面偷過(guò)來(lái)
在linux系統(tǒng)下:
每一個(gè)進(jìn)程都會(huì)有它自己的sys.stdout,除非進(jìn)程自己把它關(guān)閉了。
在/proc目錄下面系統(tǒng)會(huì)為每一個(gè)進(jìn)程創(chuàng)建一個(gè)文件夾,文件夾名字就是進(jìn)程號(hào),該文件夾下面會(huì)放一些進(jìn)程的相關(guān)信息,比如fd目錄下面會(huì)放進(jìn)程打開(kāi)的文件描述符,對(duì)文件描述符1寫(xiě)入數(shù)據(jù)就可以了。
返回屬于瀏覽器事件 你無(wú)法準(zhǔn)確監(jiān)聽(tīng)到某個(gè)瀏覽器的返回事件
所以你只能針對(duì)對(duì)象的history 來(lái)做處理
1 使用vuex 將請(qǐng)求放到 action中, 返回的數(shù)據(jù)緩存到state中
2 緩存相同的請(qǐng)求, Cache-Control: cache-directive
這個(gè)算是開(kāi)箱即用界面也很漂亮的了。
'40.00*40.00_cm'.split(/\*|_/)
// ["40.00", "40.00", "cm"]北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專(zhuān)業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dò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ù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。