現在、私はボタンをクリックすることで閉じることができるメニューを持っているAngular 2プロジェクトに取り組んでいます。これはまったく重すぎないので、(メニューのコンポーネントを使わずに)Angularの外に置いてみたいと思います。DOM操作用のカスタムスクリプトを作成する
しかし、実際には私はHTMLヘッダーに単純なjavascriptを入れていますが、別の場所に置くべきではありませんか?
また、コードは何ですか。クラスを使用して、何かをエクスポートしますか?現在、これは私のコードです:
var toggleMenuButton = document.getElementById('open-close-sidebar');
var contentHolder = document.getElementById('main-content');
var menuHolder = document.getElementById('sidebar');
var menuIsVisible = true;
var updateVisibility = function() {
contentHolder.className = menuIsVisible ? "minimised" : "extended";
menuHolder.className = menuIsVisible ? "open" : "closed";
}
toggleMenuButton.addEventListener('click', function() {
menuIsVisible = !menuIsVisible;
updateVisibility();
});
は最後にMenuComponentは、サービスとの何かに移動し、私はまだ問題が発生しています。私はにconsole.logで値をデバッグする場合
MenuService.ts
@Injectable()
export class MenuService {
isAvailable: boolean = true;
isOpen: boolean = true;
mainClass: string = "minimised";
sidebarClass: string = "open";
updateClassName() {
this.mainClass = this.isOpen ? "minimised" : "extended";
this.sidebarClass = this.isOpen ? "open" : "closed";
}
toggleMenu(newState: boolean = !this.isOpen) {
this.isOpen = newState;
this.updateClassName();
}
}
MenuComponent.ts
export class MenuComponent {
constructor(private _menuService: MenuService) { }
public isAvailable: boolean = this._menuService.isAvailable;
public sidebarClass: string = this._menuService.sidebarClass;
toggleMenu() {
this._menuService.toggleMenu();
}
}
MenuComponent.html
<div id="sidebar" [class]="sidebarClass" *ngIf="isAvailable">
...
<div id="open-close-sidebar"><a (click)="toggleMenu()"></a></div>
アクションが正しく、トリガされ、クラス名は正しくありますが、クラスの値は変更されませんでした。私はバインディングが自動であると思った。そして、私はまだそれを変更する方法を本当に理解していません。 AMagyarのようにEmmitを使用する必要がありますか?
コンポーネントのクラスを変更するには、menuserviceオブジェクトを使用します。[class] = "_ menuService.sidebarClass" – AMagyar
テンプレートでプライベート値( '_menuService')を使用すると、AOTコンパイルエラーが発生します。あなたのアプリケーションをプリコンパイルしたい場合、未来のために何かを覚えておいてください – PierreDuc
もちろん、私は彼がそれを変更すると確信していました – AMagyar