I'm trying to access vue instance data inside filter function like this. JS:-
new Vue({  data:{   amount: 10,   exchangeRate:50  },  el:"#app",  filters:{    currency: function(amount){              console.log(this);              //return amount * this.exchangeRate;             return amount *50;     }  } })   HTML:
<div id="app">  {{ amount | currency}} </div>   My goal is to use return amount * this.exchangeRate; but this is equal to window here. How can I do this ?  Thanks. jsfiddle
A Watcher in Vue. js is a special feature that allows one to watch a component and perform specified actions when the value of the component changes. It is a more generic way to observe and react to data changes in the Vue instance. Watchers are the most useful when used to perform asynchronous operations.
To start a Vue application, you have to create a new Vue instance by using the Vue function. Whenever we create a new Vue project, the Vue instance gets activated by default in the main. js file. It is also called a root Vue Instance.
According to Evan, the creator of Vue:
Use methods primarily for triggering state alterations. When you call a method, it generally implies some side effect.
Use filters primarily for simple text formatting that needs to be reused all across your app. Filters should be pure - no side effects, just data in and data out.
Use computed properties for local, component-specific data transforms. Similar to filters, computed getters should be pure.
There is a special case where you want to compute something using a scope variable that is only available in the template (e.g. a v-for alias), in such cases it's okay to use "helper methods" so that you can compute something by passing it arguments.
(source: https://forum-archive.vuejs.org/topic/830/method-vs-computed-vs-filter/2)
So, since the filter depends on the component, I think you should use a computed property in this case instead of a filter.
Like this:
new Vue({   data:{    amount: 10,    exchangeRate:60   },   el:"#app",   filters:{     currency: function(amount, exchange){               console.log(exchange);               //return amount * this.exchangeRate; <- can't do, must pass it in              return amount * exchange;       }   }  })  <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.11/vue.min.js"></script>  <div id="app">   {{ amount | currency(exchangeRate)}}  </div>  If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With