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

Watchers

So, how can we add/remove classes from thebodyif it's out of Vue's dominion? We'll have to do it the old-fashioned way with the browser's Web API. We need to run the following statements when the modal is opened or closed:

// Modal opens
document.body.classList.add('modal-open');

// Modal closes
document.body.classList.remove('modal-closed');

As discussed, Vue adds reactive getters and setters to each data property so that when data changes it knows to update the DOM appropriately. Vue also allows you to write custom logic that hooks into reactive data changes via a feature calledwatchers.

To add a watcher, first add thewatchproperty to your Vue instance. Assign an object to this where each property has the name of a declared data property, and each value is a function. The function has two arguments: the old value and new value.

Whenever a data property changes, Vue will trigger any declared watcher methods:

var app = new Vue({
  el: '#app'
  data: {
    message: 'Hello world'
  },
  watch: {
    message: function(newVal, oldVal) {
      console.log(oldVal, ', ', newVal);
    }
  }
});

setTimeout(function() {
  app.message = 'Goodbye world';
  // Output: "Hello world, Goodbye world";
}, 2000);

Vue can't update thebodytag for us, but it can trigger custom logic that will. Let's use a watcher to update thebodytag when our modal is opened and closed.

app.js:

var app = new Vue({
  data: { ... },
  watch: {
    modalOpen: function() {
      var className = 'modal-open';
      if (this.modalOpen) {
        document.body.classList.add(className);
      } else {
        document.body.classList.remove(className);
      }
    }
  }
});

Now when you try to scroll the page you'll see it won't budge!

主站蜘蛛池模板: 全南县| 股票| 修文县| 巨野县| 体育| 阿瓦提县| 遂川县| 磐石市| 镇巴县| 安远县| 策勒县| 石首市| 靖州| 辰溪县| 昌图县| 津市市| 塘沽区| 海盐县| 永泰县| 仪陇县| 准格尔旗| 甘德县| 塔河县| 襄樊市| 聂拉木县| 高雄市| 集安市| 桐城市| 驻马店市| 芒康县| 水富县| 平罗县| 巴马| 乌拉特后旗| 漯河市| 镇平县| 延吉市| 沂水县| 滕州市| 铜鼓县| 峨边|