Personally, I would approach the problem a different way all together. 
 Trying to intercept the click and stop propagation sees hack-ish.  No? 

Other approach ideas:

- put a flag on rootScope defining whether the user is logged in or not and 
reference it in the logic functions like ng-click or ng-disabled
- use a service in your controller that checks user logged in state and 
call this function in any method on your scope (same as above but service 
function instead of scope flag)
- create your own directive in place of ng-click:

<div user-click="myAction()">Do it !</div>

app.directive('userClick', function() {
    return {
        priority: -100
        restrict: 'A',
        link: function(scope, element, attrs) {
            element.bind('click', function(e) {
                if(!isRegistered()) {
                   //do something for logged out user
                }
                else{
                  //call function on parent scope
                  scope.myAction();
                }
            });
        }
    };
});

On Wednesday, April 16, 2014 2:22:36 AM UTC-6, Michel Parpaillon wrote:
>
> Hi everyone, 
> I already post this issue on Stack Overflow but nobody seems to be able to 
> help me. So here I am.
>
> Some actions in my Angular app require the user to be registered. If the 
> user is not, we want to show him a "Register modal" and prevent the 
> original action.
> Those actions can be triggered via ng-click or any other "click binding" 
> directive (for example the 'modal-toggle' one).
>
> So I found this solution: http://stackoverflow.com/a/16211108/2719044
> This is pretty cool but only works with ng-click.
> I first wanted to make the "terminal" property of the directive dynamic 
> but couldn't manage to do it. So the idea was to set "terminal" to true and 
> manually prevent default click action in the directive. 
> Here is my DOM:
>
> <!-- This can work with terminal:true and scope.$eval(attrs.ngClick) (see 
> example above) -->
> <div user-needed ng-click="myAction()">Do it !</div>
>
> <!-- This doesn't work. I can't manage to prevent the modal-toggle to be 
> executed -->
> <div user-needed modal-toggle="my-modal-id-yey">Show yourself modal !</div>
>
>  And my directive(s) (which don't work...)
>
> // First try (with terminal:true)
> app.directive('userNeeded', function() {
>     return {
>         priority: -100,
>         terminal: true,
>         restrict: 'A',
>         link: function(scope, element, attrs) {
>             element.bind('click', function(e) {
>                 if(isRegistered()) {
>                     // Here we do the action like scope.$eval or something
>                 }
>             });
>         }
>     };
> });
>
> // Second try (with stopPropagation)
> app.directive('userNeeded', function() {
>     return {
>         priority: -100
>         restrict: 'A',
>         link: function(scope, element, attrs) {
>             element.bind('click', function(e) {
>                 if(!isRegistered()) {
>                     e.stopPropagation();
>                 }
>             });
>         }
>     };
> });
>
> ...And that's why I'm here. 
> Any idea ? Thanks a lot.
>

-- 
You received this message because you are subscribed to the Google Groups 
"AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to angular+unsubscr...@googlegroups.com.
To post to this group, send email to angular@googlegroups.com.
Visit this group at http://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.

Reply via email to