А нечего отступы вручную расставлять. 
Вот ваш код в нормальном виде: 
var app = new Vue({
  el: '#vue-app-one',
  data: {
    sitename: 'The Shop',
    string: 'Hello',
    product: {
      id: 1001,
      title: 'Phone',
      description: 'The best one <em>phone</em> ever',
      price: 1000000,
      image: 'This is an image',
    },
    filters: {
      formatPrice: function(price){
        if (!parseInt(price)) {return "";}
        if (price > 9999){
          var priceString = (price /100).toFixed(2);
          var priceArray = priceString.split("").reverse();
          var index = 3;
          while (priceArray.length > index +3){
            priceArray.splice(index+3, 0, ',');
            index +=4;
          }
          return '$' + priceArray.reverse().join('');
        } else{
          return '$' + (price/100).toFixed(2);
        }
      }
    }
  },
});
 Ничего не замечаете?
Разгадка Фильтры не должны лежать в data, они не данные.