2015-07-13 17 views
2

Я создаю вид открытия/закрытия профиля, в котором пользователь может щелкнуть любую ссылку, чтобы закрыть этот профиль.

На данный момент я создал переменную $rootscope для управления ngIf.

// this is a toggle functionality 
$rootScope.profileOpened = false; 
$rootScope.userProfile = function() { 
    if ($rootScope.profileOpened) { 
     $rootScope.profileOpened = false; 
    } else { 
     $rootScope.profileOpened = true; 
    } 
} 

, а затем у меня есть директивы в теле, чтобы связать щелчок, чтобы установить $rootScope.profileOpened к ложным.

this.app.directive("globalEvents", function ($rootScope) { 
    return { 
     link: function (scope, element, attrs) { 
      element.bind('click', function (e) { 
       if ($rootScope.profileOpened) { 
        $rootScope.profileOpened = false; 
       } 
      }); 
     } 
    } 
}); 

HTML директива

<body global-events> 

$rootScope инъекция в директиве работает нормально, но когда манипулировать переменный внутри директивы, моя оригинальная $rootScope.profileOpened дос не изменится, звучит как я теряю $rootScope ссылки ,

Что мне не хватает?

ответ

2

Значение изменится, но поскольку событие находится за пределами угловой, вам нужно указать угловое значение, чтобы выполнить дайджест, используя $apply() или $timeout() или вы не увидите изменений, отраженных в поле зрения.

Try:

element.bind('click', function (e) { 
     if ($rootScope.profileOpened) { 
     $rootScope.profileOpened = false; 
     scope.$apply(); 
     } 
    }); 

При использовании ng-click угловых будет автоматически запускать дайджест внутри.

Смежные вопросы