It appears that the issue you are experiencing is specific to certain devices such as iPads, iPhones, and android phones, as you mentioned. The touchend event in these devices calls event.stopPropagation(), which prevents the action from being achieved.
To resolve this problem, there are two possible solutions:
If your code is within <ul> and <li> elements, consider moving it outside to a <div> with a link like this:
<div>
<a href="/"> main page</a>
</div>
Alternatively, you can create a new directive called eventStop like this:
<ul>
<li>
<a href="/" stop-event="touchend">main page</a>
</li>
</ul>
Here is an example of the directive implementation:
.directive('stopEvent', function() {
return {
restrict: 'A',
link: function(scope, element, attr) {
element.on(attr.stopEvent, function(e) {
e.stopPropagation();
});
}
};
});