菜鸟踩坑记录汇总

1.json文件里面不能添加注释//或者/**/

今天想当然的用//注释了一条json文件中的语句,结果编译时,运行npm install出现错误,分析了一下错误信息

发现是注释惹的祸。

JSON结构:

名称/值对的集合:key : value样式;

值的有序列表:Array;

在JSON的文档中说明只要是不符合上面两种结构的都不支持

2.node_modules里面都是编译后的文件,而组件直接编译后,compile文件夹下面就是和node_mudules里同类型的文件。本地编译测试时,可以直接替换,但是要注意替换后,需要把package.josn 文件中相关组件的依赖语句删除,否则npm install的时候还是会从仓库中获取组件,达不到替换的目的了。

3.微服务创建相关

4.javascript如何去除对象的某个属性?

答:var obj = {key1: 'value1', key2: 'value2'};

        delete obj.key1;

5.编译失败报错

Metadata version mismatch for module ............./src/main/iui/node_modules/@ng-bootstrap/ng-bootstrap/accordion/accordion-config.d.ts, found version 4, expected 3

"@ng-bootstrap/ng-bootstrap": "^1.0.0-alpha.24",
改为 "@ng-bootstrap/ng-bootstrap" : "1.0.0-alpha.24" ,

这个依赖版本应该升级了,导致版本不匹配,研究报错日志总能找到解决办法。

6.js的数组处理图解:


7.今天菜单又出问题了,打不开,F12定位以后发现一个依赖文件没有更新,折腾了大半天,又是依赖的问题!

8.获取当前url的问题:

如果是一个页面有子窗口和父窗口:

window.location.pathname---获取子窗口url的路径

window.location.href---获取子窗口整个 URL 为字符串

等等一系列方法

top.location.pathname---获取父窗口url的路径

top.location.href---获取父窗口整个 URL 为字符串

或者

window.parent.location.pathname---获取父窗口url的路径

window.parent.location.href---获取父窗口整个 URL 为字符串

9.写入和读取浏览器的localstorage

参考地址:https://www.cnblogs.com/st-leslie/p/5617130.html

写入3种方法:

if(!window.localStorage){
            alert("浏览器不支持localstorage");
            return false;
        }else{
            var storage=window.localStorage;
            //写入a字段
            storage["a"]=1;
            //写入b字段
            storage.a=1;
            //写入c字段
            storage.setItem("c",3);
            console.log(typeof storage["a"]);
            console.log(typeof storage["b"]);
            console.log(typeof storage["c"]);
        }
读取3种方法:

if(!window.localStorage){
            alert("浏览器不支持localstorage");
        }else{
            var storage=window.localStorage;
            //写入a字段
            storage["a"]=1;
            //写入b字段
            storage.a=1;
            //写入c字段
            storage.setItem("c",3);
            console.log(typeof storage["a"]);
            console.log(typeof storage["b"]);
            console.log(typeof storage["c"]);
            //第一种方法读取
            var a=storage.a;
            console.log(a);
            //第二种方法读取
            var b=storage["b"];
            console.log(b);
            //第三种方法读取
            var c=storage.getItem("c");
            console.log(c);
        }

10.今天在angular2一个模块中调用框架的一个接口函数,但是调用时ts自动检测老是报错,检查不到这个函数,因为本地文件并找不到这个函数,只有等编译后,部署到服务器上,才能调用框架的函数,但是现在自动检测报错,本地编译不能通过,这时的一个解决办法就是在ts文件最顶端添加如下代码即可:
declare var top: any;
这时调用就不会检测报错了。
top.frameWork

11.当几个模块相互跳转时,对应的菜单可能不刷新数据,这时可能和缓存有关,也许菜单配置了缓存项。

12.关于回调函数,回调函数传递给另一个函数时,传递的仅仅是函数名,

即我们可以像使用变量一样使用函数,作为另一个函数的参数,在另一个函数中作为返回结果,在另一个函数中调用它。当我们作为参数传递一个回调函数给另一个函数时,我们只传递了这个函数的定义,并没有在参数中执行它。见下例:

function logStuff (userData) {
}


function getInput (options, callback) {
    callback (options);
}

getInput ({name:"Rich", speciality:"JavaScript"}, logStuff);

13.input单选框radio一定要加name属性才起作用!如何让浏览器知道这是道单选题呢,radio通过同名也就是同name来实现,单选框的 name 属性是来定义同一组radio的,这两个radio不在同一组,如果你不写name,是没办法使用单选的。

14.angular2中使用radio的坑,ngmodle绑定的冲突,待补。

15.

问题:Angular 2+ and Observables: Can't bind to 'ngModelsince it isn't a known property of 'select'

解决:

>= RC.5

The FormsModule needs to be imported to make ngModel available

import { FormsModule } from '@angular/forms';
@NgModule({
  imports: [BrowserModule /* or CommonModule */, 
  FormsModule, ReactiveFormsModule],
  ...
)}
class SomeModule {}

<= RC.4

In config.js add

'@angular/forms': {
  main: 'bundles/forms.umd.js',
  defaultExtension: 'js'
},

in main.ts add

import {provideForms, disableDeprecatedForms} from '@angular/forms';

bootstrap(App, [disableDeprecatedForms(),provideForms()])

16.

margin相对的元素在不同的情况下有所不同:

如果父元素在子元素的margin的同向上有padding或border的话,子元素的margin相对于父元素,否则相对于父元素以外的元素。

17.css定位问题


利用input和ul li 写了一个地理位置组件,在上面3个input按inline-block排列,首先会遇到一个空格的问题,3个input之间除了margin的配置,其实还有一个空格,代码形如:

//第一个input
< div class= "divInput" >
< input />
< div >
< ul >
< li >{{item}} </ li >
</ ul >
</ div >
</ div >(空格在这里,本来是换行,当设置display:inline-block时,就形成了一个小空格
< div class= "divInput" > //第二个input
< input />
< div >
< ul >
< li >{{item}} </ li >
</ ul >
</ div >
</ div >

网上大概有几种不同的解决方案,最后为了方便采用这种:

//第一个input
<div class="divInput">
    <input  />
    <div  >
    <ul>
      <li>{{item}}</li>
  </ul>
    </div>
  </div><div class="divInput" > //第二个input(两个div紧挨着写即可去掉空格)
    <input  />
    <div >
      <ul  >
        <li >{{item}}</li>
    </ul>
      </div>
  </div>

17(1).定位问题
<div class="divInput"> //input父块要设置为position:relative,不可省略,这样下拉列表的就与input同宽了。
    <input  />
    <div  > //为了显示下拉框不影响布局,ul的div块设置position:absolute,还有就是宽度问题,怎么保证和input同宽,width:100%
                需要注意,这个100%需要相对于input父块,所以要把input父块设置为position:relative;
    <ul>
      <li>{{item}}</li>
  </ul>
    </div>
  </div><div class="divInput" > //第二个input(两个div紧挨着写即可去掉空格)
    <input  />
    <div >
      <ul  >
        <li >{{item}}</li>
    </ul>
      </div>
  </div>





猜你喜欢

转载自blog.csdn.net/zwbHUST/article/details/78362561