Reputation: 3476
The application I'm building has an option for Users to change the unit distances between kilometers and miles.
I've build a small filter to convert those distances:
app.filter('distance', function() {
return function(input, scope) {
var distanceName = (scope.units.distance === 'km') ? 'km' : 'ml';
// scope.units.value is 1000 by default and 621 if miles are selected.
return (input / scope.units.value).toFixed(2) + distanceName;
};
});
In my template I use it simply like that:
{{ point.distance | distance }}
The issue is when the $scope.units.value
change the filter do not update the value, I should re run the filter in someway... Even if I expect it to be done by Angular, but it doesn't.
When the value change the digest is started so if I force it with $scope.$apply()
it fire an error.
How can I solve it, what I'm missing for it to work?
Upvotes: 1
Views: 184
Reputation: 4974
The second (and consequent) input arguments to a filter are specified using the colon :
operators.
Right now you're not specifying a second argument to your filter.
points.distance
is the input argument, arguments specified after colons are the rest of the possible parameters.
So in your case units.distance
maps to scope
on your filter, which is a confusing name, consider changing it to measurement
or something like that
For your filter to work you also need units.value
. Add an additional parameter to your filter return function(input, measurement, value) ...
and use it like so
{{ point.distance | distance:units.distance:units.value }}
EDIT: Like @charlietfl mentioned, a simpler solution would probably be:
return function(input, measurementConfig) ...
Usage:
{{ point.distance | distance:units }}
Upvotes: 1