MVC 简单模式 实现加减乘除

(() => {
  const init = () => {
    model.init()
    view.init()
    Controal.init()
  }

  const model = {
    data: {
      one: 1,
      two: 2,
      total: 3,
      symbol: '+'
    },
    init: () => {
      const _this = model
      for (let key in _this.data) {
        Object.defineProperty(_this, key, {
          get: () => {
            return _this.data[key]
          },
          set: (newValue) => {
            _this.data[key] = newValue
            view.init({
              [key]: newValue
            })
          }
        })
      }
    }
  }

  const Controal = {
    init: function() {
      const allInputValues = document.querySelectorAll('input')

      const allSymbols = document.querySelectorAll('.symbols')
      for (let i = 0; i < allInputValues.length; i++) {
        const intItem = allInputValues[i]

        intItem.addEventListener('input', this.handleInput, false)
      }

      for (let i = 0; i < allSymbols.length; i++) {
        const symItem = allSymbols[i]

        symItem.addEventListener('click', this.handleClick, false)
      }

      
    },
    handleInput: (e) => {
        const tar = e.target,
              value = Number(tar.value),
              className = tar.className,
              targetName = className.split(' ')[1]

        model[targetName] = value
        model.total = eval('model.one' + model.symbol + 'model.two')
    },
    handleClick: (e) => {
      const tar = e.target,
            className = tar.className.split(' ')[1].slice(0, -1),
            value = tar.textContent;
      model[className] = value
      model.total = eval('model.one' + model.symbol + 'model.two')
    }
  }

  const view = {
    el: '#app',
    template: `
      <div class="content">
        <p>
          <span class="cal one">{{ one }}</span>
          <span class="cal symbol">{{ symbol }}</span>
          <span class="cal two">{{ two }}</span>=
          <span class="cal total">{{ total }}</span>
        </p>
        <p>
          one<input type="text" class="int one"></input>
          two<input type="text" class="int two"></input>
        </p>
        <p>
          <span class="cal symbols">+</span>
          <span class="cal symbols">-</span>
          <span class="cal symbols">*</span>
          <span class="cal symbols">/</span>
        </p>
      </div>
    `,
    init: function (mutiData) {
      if (!mutiData) {
        this.template = this.template.replace(/\{\{(.*?)\}\}/g, function (node, key) {
          return model[key.trim()]
        })
        const container = document.createElement('div')
        container.innerHTML = this.template
        document.querySelector(this.el).appendChild(container)
      } else {
        for (let key in mutiData) {
          const targetElement = document.querySelector(`.${key}`)

          targetElement.textContent = mutiData[key]
        }
      }
    }
  }
  init()
})()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值