1. 程式人生 > >菜鳥踩坑記錄彙總

菜鳥踩坑記錄彙總

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>