Let say I have nested DOMs and each has ui-sref
for different angular-ui-router
state. I want to click outer to only alert outer and c
Add the event stop propogation/event prevent default at ur inner stateprovider :
$stateProvider.state("outer", {
url: "/outer",
resolve: {
test: function() {
alert("Triggered state outer");
return true;
}
}
}).state("inner", {
url: "/inner",
resolve: {
test: function() {
alert("Triggered state inner");
//$event.stopPropagation();
$event.preventDefault();
return true;
}
}
})
Update 1: I tried on plunker demo and $event is available. As per angular doc also for
Event object is available as $event. DEMO Angular doc
Update 2: Above works if u press outer div first but that's not rt solution I agree. So here is another solution which works. checking the statechangestart of scope and saving last state name in var and checking if its inner then event preventdefault;
app.controller('MainCtrl', function($scope) {
$scope.name = 'World';
var laststate = "";
$scope.$on('$stateChangeStart',
function(event, toState, toParams, fromState, fromParams) {
//alert(laststate);
if (laststate == "inner") {
event.preventDefault();
}
laststate = toState.name;
});
});
DEMO Plunker