I\'m searching for a possibility to replace characters in the ui-sref, respecting the URL of a target.
.state(\'base.product.detail\', {
url: \'detail/:p
Register a custom type that marshalls and unmarshalls the data. Docs here: http://angular-ui.github.io/ui-router/site/#/api/ui.router.util.$urlMatcherFactory
Let's define a custom type. Implement encode, decode, is and pattern:
var productType = {
encode: function(str) { return str && str.replace(/ /g, "-"); },
decode: function(str) { return str && str.replace(/-/g, " "); },
is: angular.isString,
pattern: /[^/]+/
};
Now register the custom type as 'product' with $urlMatcherFactoryProvider:
app.config(function($stateProvider, $urlRouterProvider, $urlMatcherFactoryProvider) {
$urlMatcherFactoryProvider.type('product', productType);
}
Now define your url parameter as a product and the custom type will do the mapping for you:
$stateProvider.state('baseproductdetail', {
url: '/detail/{productName:product}-:productId/',
controller: function($scope, $stateParams) {
$scope.product = $stateParams.productName;
$scope.productId = $stateParams.productId;
},
template: "name: {{product}}
name: {{productId}}
"
});
Working plunk: http://plnkr.co/edit/wsiu7cx5rfZLawzyjHtf?p=preview