4

Telerik Side-drawer를 한 번에 볼 수있게되었지만 전 세계적으로 사용할 수있는 구성 요소로 만들었습니다.모든보기에서 Telerik Sidedrawer 만들기

저는 복사하여 모든보기에 붙여 넣으려고합니다. 그래서 제 질문은 어떻게 재사용 가능한 구성 요소로 바꿀 수 있습니까?

+0

안녕하세요, 사람들이 질문에 답변하는 데 도움이 될 수있는 코드를 공유 할 수있을뿐만 아니라 하향 투표를 막는 데 도움이되도록 육체를 질문 할 수 있습니다. – Clint

답변

4

그래서 당신은 page-router-outlet

의 주요 응용 프로그램 <page-router-outlet></page-router-outlet> 템플릿 수정하지 마십시오 사용할 때 - 당신이 그렇지 않으면 느낄 수 있지만 미세 (페이지 라우터 출구 작품은 메인 페이지에 측면 서랍을 추가하는 방법을 - 문서 오해의 소지가 있지만 그렇게 작동합니다). 는 TS 부분이 예를 들어 SideDrawer 구성 요소를 기반으로합니다

<RadSideDrawer #drawer> 
    <StackLayout tkDrawerContent class="sideStackLayout"> 
     <StackLayout class="sideTitleStackLayout"> 

      <ScrollView> 
       <StackLayout class="sideStackLayout"> 

       <!-- content of menu --> 

       </StackLayout> 
      </ScrollView> 
     </StackLayout> 

    </StackLayout> 
    <StackLayout tkMainContent> 
     <ActionBar title=""> 
       <!-- this is your action bar content --> 
     </ActionBar> 
     <ng-content></ng-content> 
    </StackLayout> 
</RadSideDrawer> 

:

지금 측면 서랍을 포함하면 지침이 될 것입니다 구성 요소를 만들고, 템플릿을 이잖아. 그 그렇게 선언 있다고하자 (I 찢어진로 실제 파일 @Component에 경로를 변경주의하시기 바랍니다 실제 프로젝트 - 해당 템플릿은 components/header/header.component.html에 나를 위해 배치되고 your-header 지시어 기지 않도록) :

@Component({ 
    selector: "your-header", 
    templateUrl: "components/header/header.component.html", 
    styleUrls: ['components/header/header.css'], 
}) 
실제 페이지에서

당신이 HeaderComponent

import {HeaderComponent} from "../../header/header.component"; 

@Component({ 
    selector: "login-page", 
    templateUrl: "components/user/login/login.component.html", 
    styleUrls: ['components/user/login/login.css'], 
    directives: [HeaderComponent] 
}) 

이 새로운 지침을 전달합니다 (다시 내 프로젝트 login 페이지에 표시) 그리고 당신은 지시에 login.component.html 포장

<your-header> 
    <StackLayout class="content"> 
     <label class="h1 left" text="Please Login"></label> 
    </StackLayout> 
</your-header> 

무엇을 할지는 각도 작업의 일반적인 지시문과 마찬가지로 사이드 드로우 어 내용 섹션 (SideDrawer 템플릿의 ng-content)에 항상 콘텐츠 페이지를 생성하는 것입니다.

유일한 누락 사항은 부트 스트랩 초기화에 Sidedrawer 지시문 자체를 추가하는 것입니다.

import {nativeScriptBootstrap} from "nativescript-angular/application"; 
import {nsProvideRouter} from "nativescript-angular/router"; 
import {RouterConfig} from "@angular/router"; 
import {AppComponent} from "./app.component"; 
import {SIDEDRAWER_PROVIDERS} from "nativescript-telerik-ui/sidedrawer/angular"; 

import {LandingComponent} from "./components/landingPage/landing.component"; 
import {LoginComponent} from "./components/user/login/login.component"; 



import {ExperimentalComponent} from "./components/experimental/experimental.component"; 


export const AppRoutes: RouterConfig = [ 
    { path: "", component: LandingComponent }, 
    { path: "login", component: LoginComponent }, 

] 

nativeScriptBootstrap(AppComponent, [ 
    [nsProvideRouter(AppRoutes, {})], 
    SIDEDRAWER_PROVIDERS, 
], { startPageActionBarHidden: true }); 

뭔가 지시를 내장 년 유 만든 것이 실수를 작동하지 않으면, 당신은 SideDrawer을 던질 수 있고 당신이 (ng-content을 통해 제대로 전달 HTML)

작업 얻을 때까지,이 그냥 레이블을 추가

형태가 1.3.x 인 것을주의하십시오. SideDrawer와 나는 당신의 부트 스트랩 파일을 명백하게 바꿀 것이지만 1.4.x에 변화가 있다고 생각합니다. 그러나 처리는 그대로 유지됩니다.

SideDrawer 템플릿에 모든 내용을 래핑해야합니다. 그렇지 않으면 두 개의 뷰 서랍이 생기며 플랫하게 떨어집니다 (SideDrawer에는 자체 드로잉 메서드가 있음). SideDrawer를 일부 페이지에서 사용하지 않으려면 지시문을 포함하지 말아야합니다.

또한 정상적인 지시어이므로 직원에게 머리글 <your-header variable="variableValue">을 전달할 수 있습니다. 톱 페이지 align 모델과 ActionBar의 옵션간에이 방법을 전환 할 수 있습니다.

+0

i 사용자 페이지 - 라우터 - 콘센트 인 경우 ng-content 대신 작동합니다. 액션 바가 비어있었습니다. 그러나 라우팅을 구현하는 방법은 무엇입니까? – Habeeb

+1

라우팅이 실제로 변경되지 않습니다. 'page-router-outlet' 템플리트는 정상적인 지시문처럼 작동하지 않으므로 변경해서는 안됩니다. 새로운 페이지는 제가 기억하는 한 루트 페이지를 대체합니다. 그래서 '페이지 - 라우터 - 콘센트'에 작업 표시 줄을 넣은 사람들은 첫 페이지의 작업 표시 줄을 보지만 다른 페이지에는 표시되지 않습니다. 'sidedrawer의 구현은'page-router-outlet'이 빌드되는 방식을 둘러싼 큰 해킹입니다;] – sp3c1

+0

'SIDEDRAWER_PROVIDERS'는 최신 버전의 RadSideDrawer에서 더 이상 사용되지 않습니다. 간단한 대안? –