Prevent calling parent when nested ui-sref

后端 未结 6 1069

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

6条回答
  •  不要未来只要你来
    2021-02-18 22:22

    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

提交回复
热议问题