मैं जेनरेट किए गए एप्लिकेशन में जेएचप्स्टर लेआउट बदल रहा हूं।

मैं Principal को router-outlet के अंदर प्रस्तुत किए गए किसी भी घटक में इंजेक्ट कर सकता हूं, हालांकि, अगर मैं इसे मुख्य घटक में इंजेक्ट करने का प्रयास करता हूं, तो जब भी मैं लॉगिन/लॉगआउट करने का प्रयास करता हूं तो एक त्रुटि दिखाई देती है (यदि मैं रीफ्रेश करता हूं पृष्ठ सब कुछ ठीक दिखाता है)।

समस्या पैदा करने वाला कोड है

export class JhiMainComponent implements OnInit {
    constructor(private jhiLanguageHelper: JhiLanguageHelper, private router: Router, principal: Principal) {}

अगर मैं principal: Principal हटा देता हूं तो सब कुछ फिर से काम करता है, अगर मैं इस इंजेक्शन को जोड़ता हूं तो लॉगिन त्रुटि के साथ काम करना बंद कर देता है

त्रुटि लेखन त्रुटि: LoginService.logout (webpack-internal:///./src/main/webapp/app/core/login/login.service.ts:33) पर अपरिभाषित की संपत्ति 'प्रमाणीकृत' नहीं पढ़ सकता है NavbarComponent.logout ( webpack-internal:///./src/main/webapp/app/layouts/navbar/navbar.component.ts:49) Object.eval [ashandelEvent] पर (ng:///ConsuldentAppModule/NavbarComponent.ngfactory.js) :695) हैंडलएवेंट (वेबपैक-आंतरिक: ///./node_modules/@angular/core/fesm5/core.js:19661) पर callWithDebugContext (webpack-internal:///./node_modules/@angular/core/fesm5) पर /core.js:20755) Object.debugHandleEvent [ashandleEvent] (webpack-internal:///./node_modules/@angular/core/fesm5/core.js:20458) पर डिस्पैचएवेंट (webpack-internal:///) पर ./node_modules/@angular/core/fesm5/core.js:17110) eval पर (webpack-internal:///./node_modules/@angular/core/fesm5/core.js:17557) HTMLAnchorElement.eval (webpack) पर -आंतरिक:///./node_modules/@angular/platform-browser/fesm5/platform-browser.js:1044 ) ZoneDelegate.invokeTask पर (webpack-internal:///./node_modules/zone.js/dist/zone.js:420)

मुझे संपत्ति की आवश्यकता है क्योंकि मेरे पास कुछ सशर्त शैलियाँ हैं जो इस आधार पर चुनी जाती हैं कि उपयोगकर्ता लॉग इन है या नहीं (यहाँ मैं विधि के साथ प्रयास कर रहा हूँ) प्रमाणित ())

<div id="page-container" class="page-container fade page-sidebar-fixed page-header-fixed show" [ngClass]="{
    'page-without-sidebar': isPageWithoutSidebar() || !isAuthenticated()
  }">
    <router-outlet name="header" *ngIf="!pageSettings.pageEmpty"></router-outlet>
    <router-outlet name="sidebar" *ngIf="!isPageWithoutSidebar() && !pageSettings.pageEmpty && isAuthenticated()"></router-outlet>

    <div id="content" class="content" [ngClass]="{
    'content-full-width': pageSettings.pageContentFullWidth,
    'content-inverse-mode': pageSettings.pageContentInverseMode,
    'p-0 m-0': pageSettings.pageEmpty
  }">
        <router-outlet></router-outlet>
        <router-outlet name="popup"></router-outlet>
    </div>

    <jhi-footer *ngIf="pageSettings.pageWithFooter"></jhi-footer>
</div>
1
rekiem87 3 पद 2018, 06:40

1 उत्तर

सबसे बढ़िया उत्तर

ठीक है मैंने जो किया वह चर के साथ एक सेवा बनाना था

@Injectable({
    providedIn: 'root'
})
export class PageSettingsService {
    pageSettings = pageSettings;

    constructor() {
    }
}

फिर मैं इस सेवा को मुख्य घटक में इंजेक्ट करता हूं, जहां मैं pageSettings संपत्ति का उपयोग करता हूं

export class AppComponent extends JhiMainComponent implements OnInit {

    pageSettings;
    // window scroll
    pageHasScroll;

    ngOnInit() {
        super.ngOnInit();
        // page settings
        this.pageSettings = this.pageSettingsService.pageSettings;
    }
}

फिर मैंने लॉगिन सेवा संपादित की (यह हिस्सा साफ नहीं लगता है, लेकिन काम करता है)

@Injectable({ providedIn: 'root' })
export class LoginService {
    constructor(private principal: Principal, private authServerProvider: AuthServerProvider, private pageSettingsService: PageSettingsService) {}

    login(credentials, callback?) {
        const cb = callback || function() {};

        return new Promise((resolve, reject) => {
            this.authServerProvider.login(credentials).subscribe(
                data => {
                    this.principal.identity(true).then(account => {
                        resolve(data);
                        this.pageSettingsService.pageSettings.pageWithoutSidebar = false; //Added
                    });
                    return cb();
                },
                err => {
                    this.logout();
                    reject(err);
                    return cb(err);
                }
            );
        });
    }
...
    logout() {
        this.pageSettingsService.pageSettings.pageWithoutSidebar = true; //Added
        this.authServerProvider.logout().subscribe();
        this.principal.authenticate(null);
    }
}
0
rekiem87 3 पद 2018, 04:23