Новый для углового здесь:
Я хотел бы условно скрыть мою директиву NavBar, поэтому я добавил атрибут следующим образом:
export function NavbarDirective() {
'ngInject';
let directive = {
restrict: 'E',
templateUrl: 'app/components/navbar/navbar.html',
scope: {
hidden: "="
},
controller: NavbarController,
controllerAs: 'navBarVm',
bindToController: true
};
return directive;
}
class NavbarController {
constructor() {
'ngInject';
}
}
И используйте его следующим образом:
<lb-navbar hidden="main.loading"></lb-navbar>
Однако, когда main.loading
становится ложным, NavBar не появляется снова. Как я могу это исправить?
Пока что я только что завернул в div следующим образом:
<div ng-hide="vm.loading"> <lb-navbar hidden="main.loading"></lb-navbar> </div>
, однако, я ищу правильный способ создания привязки "pass by reference" в директиве.
Это не настоящий угловой вопрос.
Поскольку вы используете
hidden
для скрытия элемент, вам нужно удалитьhidden
attr вашей директивы, а не задаватьhidden="false"
когда вы хотите его снова открыть.
<div hidden="true">1.div with hidden="true" (you cant see me)</div>
<br />
<div hidden="false">2.div with hidden="false" (you cant see me)</div>
<br />
<div>3.div without hidden attr (you can only see me)</div>
Для вашего случая два решения,
1. Просто используйте ng-hide
замените hidden
:
<lb-navbar ng-hide="main.loading"></lb-navbar>
2. Другое имя, а не hidden
для контроля видимости:
Ваша директива:
let directive = {
restrict: 'E',
templateUrl: 'app/components/navbar/navbar.html',
scope: {
myhidden: "="
},
controller: NavbarController,
controllerAs: 'navBarVm',
bindToController: true,
link:function(scope,element,attrs){
scope.$watch('myhidden',function(nv,ov){
nv ? element.hide() : element.show();
return false;
});
}
};
И разметка:
<lb-navbar myhidden="main.loading"></lb-navbar>
hidden
переменную над HTML шаблона директивы?