官术网_书友最值得收藏!

3.3.5 terminal

terminal:使用terminal選項(xiàng)是一個(gè)相對(duì)較為復(fù)雜的過(guò)程,選項(xiàng)terminal的作用是阻止Vue.js遍歷當(dāng)前元素及其內(nèi)部元素,并由該指令本身去編譯綁定元素及其內(nèi)部元素。Vue通過(guò)遞歸遍歷DOM樹(shù)來(lái)編譯模塊。但是當(dāng)它遇到terminal指令時(shí)會(huì)停止遍歷這個(gè)元素的后代元素,并由terminal指令接管編譯這個(gè)元素及其后代元素。v-if和v-for都是terminal指令。

編寫(xiě)自定義terminal指令是一個(gè)高級(jí)話(huà)題,需要較好地理解Vue的編譯流程,但這不是說(shuō)不可能編寫(xiě)自定義terminal指令。用terminal:true指定自定義terminal指令,可能還需要用Vue.FragmentFactory來(lái)編譯partial。下面是一個(gè)自定義terminal指令的示例,terminal指令編譯內(nèi)容模板并將結(jié)果注入頁(yè)面的另一個(gè)地方。

提示:如果想編寫(xiě)自定義terminal指令代碼,建議讀者先通讀內(nèi)置terminal指令的源碼(如v-if和v-for),以便更好地了解Vue的內(nèi)部機(jī)制。

代碼如下:

    var FragmentFactory = Vue.FragmentFactoryvar remove = Vue.util.removevar createAnchor = Vue.util.
createAnchor
     Vue.directive('inject', {
        terminal: true,
        bind: function(){
          var container = document.getElementById(this.arg)
          this.anchor = createAnchor('v-inject')
          container.appendChild(this.anchor)
          remove(this.el)
          var factory = new FragmentFactory(this.vm, this.el)
          this.frag = factory.create(this._host, this._scope, this._frag)
          this.frag.before(this.anchor)
        },
        unbind: function(){
          this.frag.remove()
          remove(this.anchor)
        }
     })
     <div id="modal"></div>
        <div v-inject:modal>
          <h3>header</h3>
          <p>body</p>
          <p>footer</p>
        </div>
主站蜘蛛池模板: 昌吉市| 华宁县| 沂源县| 株洲县| 运城市| 绥芬河市| 阳春市| 英吉沙县| 土默特右旗| 黑龙江省| 崇信县| 磐石市| 鹰潭市| 陆河县| 浪卡子县| 崇阳县| 威信县| 安阳市| 武邑县| 鄂州市| 凤庆县| 英山县| 贡嘎县| 稷山县| 阿巴嘎旗| 交城县| 德庆县| 随州市| 游戏| 石屏县| 墨江| 肥东县| 崇左市| 天镇县| 油尖旺区| 正安县| 新巴尔虎右旗| 上虞市| 襄垣县| 任丘市| 桦南县|