SOURCE

console 命令行工具 X clear

                    
>
console
<!DOCTYPE html>
<html>
    <body>
    <style>

    </style>
        <div class="ellipsis">
            <div id="fileList"></div>
        </div>
        <input id="setText"></input>
        <span id="showText"></span>
    </body>
</html>
<script>
    // nextTick
    function k_nextTick(fn) {
        setTimeout(fn, 0)
    }
    function k_nextTickUse() {
        k_nextTick(() => {
            alert('111')
        })
    }
    // k_nextTickUse()
    /* 
    *   nextTick,官方会调用Promise.then(异步回调)、MutationObserver(观测API) 和 setImmediate(NODE),
    *   为了兼容,他会在都不能调用的时候,直接调用定时器,直接把当前任务放在Event Loop队列中  https://cn.vuejs.org/v2/api/#Vue-nextTick
    */ 

    // v-if 和v-show
    /* 
    *   这个没什么好些的,show就是display: none;样式上的消失,if就是从渲染函数上标记是否渲染
    *   当一个DOM不需要重复的展开关闭(一次性,或者只需要判断是否存在),用if最佳,当一个DOM需要重复展开关闭(如搜索框),用show最佳
    *   https://cn.vuejs.org/v2/api/#v-show
    */ 

    // v-for
    var upDataList = [{name: 1}, {name: 2}]
    function renderFn() {
        let refs = document.getElementById('fileList')
        refs.innerHTML = ''
        let kNote = ''
        upDataList.map((item, index) => {
            kNote = kNote + `<div>${item.name}<div>`
        })
        refs.innerHTML = kNote
    }
    // renderFn()
    /* 
    *   这个用到了模板语法,就拿到虚拟DOM队列,然后循环遍历出来,没去研究模板语法,是通过字符串替换等手段去完成一个渲染
    *   https://blog.csdn.net/future_todo/article/details/52725177
    */ 

    //  双向绑定
    var modelText = {name: 'a'}
    var modelTextWatch = modelText.name
    let inputDOM = document.querySelector('#setText')
    Object.defineProperty(modelText, 'name', {
        get: function () {
            return modelTextWatch
        },
        set: function (newVal) {
            modelTextWatch = newVal
            document.querySelector('#setText').value = modelTextWatch
            document.querySelector('#showText').innerText = modelTextWatch
        }
    })
    inputDOM.addEventListener("input", (event) => {
        let value = event.target.value
        modelText['name'] = value
    })
    /* 
    *   双向绑定用到了Object.defineProperty这个API,遍历对象的所有属性,然后用get,set来规定他绑定的动作,然后用监听来监听操作
    *   这也是为什么vue双向绑定只支持<input><select><textarea>和components(这个是因为vue自己又写了套监听逻辑,所以才可以的)
    *   https://cn.vuejs.org/v2/api/#v-model
    */ 

    //  点击后n秒内不允许再次点击(vue+element的东西)
    // Vue.directive('delay-click', {
    //     inserted: function (el, binding, vnode) {
    //       let delayTime = binding.value || 5000
    //       el.addEventListener('click', () => {
    //         el.setAttribute('disabled', true)
    //         el.classList.add('is-disabled')
    //         setTimeout(() => {
    //           el.removeAttribute('disabled')
    //           el.classList.remove('is-disabled')
    //         }, delayTime)
    //       })
    //     }
    // })
</script>