踩坑笔记(前端)
一、iframe子页面与父页面通信
// 父页面
<html xmlns:th="http://www.thymeleaf.org">
……
<script th:inline="javascript">
// 后端通过 ModelAndView 传给前端;
// 前端通过 Thymeleaf 取得数据
var computableModelList = [[${computableModelList}]];
</script>
<body>
<div></div>
<iframe id="ModelEditor" src="/common/integratedModelEditor"></iframe>
</body>
<script>
var iframeWindow=$("#ModelEditor")[0].contentWindow;
var xml = iframeWindow.getCXml();
iframeWindow.hasSearchedTermsComputableModel.push("");
</script>
……
</html>
// 子页面
<html>
……
<script>
var computableModelList = parent.computableModelList;
</script>
<body>
<div></div>
</body>
<script>
var hasSearchedTermsComputableModel = [];
function getCXml() {
return ui.editor.getGraphXml().outerHTML;
}
</script>
……
</html>
- 父页面获取子页面 属性、方法
var iframeWindow=$("#ModelEditor")[0].contentWindow;
// 属性
iframeWindow.hasSearchedTermsComputableModel.push("");
// 方法
var xml = iframeWindow.getCXml();
- 子页面获取父页面 属性、方法
// 属性
var computableModelList = parent.computableModelList;
// 方法
子页面调用父页面方法:parent.window.parentMethod();
在方法调用前,以下点必须要确保 iframe 已经加载完成!!!
- iframe上用onload事件
- 用document.readyState=="complete"来判断
二、github 删除文件夹
Git Bash Here
1. $ git --help
2. $ dir 查看已有文件夹
3. $ git rm -r --cached target 删除target文件夹
4. $ git commit -m '删除target文件夹' 提交到本地
5. $ git push -u origin master 更新到远程github项目中
删除完毕
三、延迟运行、循环运行 → setTimeout() setInterval()
1. setTimeout(()=>{},1000);
2. var prepare = setInterval(()=>{},1000); clearInterval(prepare);
四、String《==》 XML
string2XML(string){
let parser = new DOMParser();
let xmlObject = parser.parseFromString(string, "text/xml");
return xmlObject;
},
xml2String(xml){
return (new XMLSerializer()).serializeToString(xml);
},
五、CSS 计算函数
<div style="height: calc(100% - 100px);"></div>
六、CSS white-space属性 影响换行
定义如何处理空白
var imageContainer = document.createElement("div");
imageContainer.id = "imageContainer";
imageContainer.style.whiteSpace = "initial";
七、Vue 给对象添加新的属性 → this.$set()
如果在实例创建之后添加新的属性到实例上,它不会触发视图更新。
1. event.children = children;
2. this.$set(event,'children',children); // 为vue变量添加属性,这句代码比上句更robust!
八、Vue v-bind的用法
<!-- 内联字符串拼接 -->
<img :src="'/path/to/images/' + fileName">
<!-- class 绑定 -->
<div :class="{ red: isRed }"></div> //red这个class的存在取决与isRed的true或false
<div :class="[classA, classB]"></div>
<div :class="[classA, { classB: isB, classC: isC }]">
<!-- style 绑定 -->
<div :style="{ fontSize: size + 'px' }"></div>
<div :style="[styleObjectA, styleObjectB]"></div>
九、js 数组去重
Array.from(new Set(names))
//lodash
var newArray = _.uniq(array); //一般数组
var newArray = _.uniqBy(array,'geoId'); //对象数组
十、js 浅拷贝 与 深拷贝 lodash.js
//html引入lodash
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>
var graphRoot = _.cloneDeep(graph.model.root); //深拷贝
十一、js 数组 交集、并集、补集 lodash.js
var a = [];
var b = [];
var c = [];
_.union(a, b, c);
_.intersection(a, b, c);
_.xor(a, b);
十二、类数组对象
// cells 类数组对象 没有长度的属性和数组的方法
var cells = graph.model.cells;
for(let i in cells){
x = cells[i].geometry.x;
}
for(let i = 0; i<cells.length; i++){
//错 ×××××××××××
}