2017-08-06 21 views
0

在新的V1 Web組件的規格,你可以說像如何在javascript中創建元素並將參數傳遞給它?

class gg extends HTMLElement { 
    constructor(a) { 
     super(); 
    } 
} 

customElements.define('gg-gg', gg); 

創建一個新的元素,那麼你就可以創建它的一個新的實例,通過做這樣

<gg-gg></gg-gg> 

new gg(1); 

甚至

document.createElement("gg-gg"); 

但在最後的方法document.createElement("gg-gg"),你將如何在構造函數中傳入參數a

+2

爲什麼你會? –

+0

您可以通過添加另一組圓括號'myFunction(par,am)(ano,ther,param)' –

+0

將參數傳遞給函數中包含的函數,但是這與我的問題有什麼關係? – omega

回答

0

可以傳遞,並在第二個參數options目的是document.createElement()其中屬性設置爲"is"contructor使用setTimeout()上的可變標識符引用super()得到"is"屬性

class gg extends HTMLElement { 
 
    constructor(a) { 
 
     const curr = super(); 
 
     setTimeout((el) => { 
 
      console.log(JSON.parse(el.getAttribute("is"))) 
 
     }, 0, curr) 
 
    } 
 
} 
 

 
customElements.define('gg-gg', gg); 
 

 
const g = document.createElement("gg-gg", {"is":JSON.stringify({"abc":123})});

的值呼叫 .getAttribute()
+0

可以通過使用\t \t'connectedCallback(){ \t \t \t警報避免超時(this.getAttribute( '是')); \t \t}'但這種方式看起來太冗長而且僅限於字符串。這真的是使用'createElement'傳遞參數的最好方法嗎? – omega

+0

@omega「最好」的定義是什麼? – guest271314

+0

類似於'document.createElement('gg-gg',{},1);'然後'a'在構造函數中是1。這似乎可能是一種優雅的官方方式,可以支持任何類型的數據參數。但如果類似的東西不存在,那麼我猜想不支持傳遞這樣的參數。 – omega

0

您可以使用函數創建一個class表達式,其中默認參數s的用來設置constructor

const gcreate = (...props) => { 
 
    const gg = class extends HTMLElement { 
 
    constructor(a = props) { 
 
     console.log(a); 
 
     a.find(prop => 
 
     typeof prop === "object" 
 
     && !Array.isArray(prop)) 
 
     ["def"](789) 
 
     super(); 
 
    } 
 
    } 
 
    customElements.define('gg-gg', gg); 
 
    return document.createElement("gg-gg"); 
 
} 
 

 
let g = gcreate(
 
     // pass parameters 
 
     "abc" 
 
     , 123 
 
     , [4,5,6] 
 
     , {def:(prop) => console.log(prop)} 
 
     , null, void 0 
 
     );

-1

這裏的另一種方式,你可以在參數加載到你的構造。它通過加載臨時有效載荷來工作。

// Args 
 
var args; 
 

 
// Create Element 
 
var createElem = function (element, arguments) { 
 
    typeof arguments === 'undefined' ? args = {} : args = arguments; 
 
    return document.createElement('gg-gg'); 
 
} 
 

 
// Define Custom Component 
 
customElements.define('gg-gg', class extends HTMLElement { 
 
    constructor() { 
 
    super(); 
 
    console.log(args); 
 
    } 
 
}); 
 

 
// Arguments 
 
createElem('gg-gg', { 
 
    width: 500, 
 
    height: 500, 
 
}); 
 

 
// No arguments 
 
createElem('gg-gg');

相關問題