2017-12-28 9 views
1

내 문제는 특정 페이지 사이에 특정 애니메이션을 지정하고 싶습니다.각도 5 애니메이션 특정 전환

특정 URL로 이동하는 버튼을 클릭하면 한 종류의 애니메이션을 수행하고 싶습니다. (페이지 1에 있고 페이지 2로 이동) http : // localhost : 4200/page2. 그럼 내가 page1에 goBack()을하고 싶다면 홈페이지에 돌아올 때 다른 애니메이션을 원한다. http : // localhost : 4200.

그러나 : 전환 옵션을 사용하면 한 가지 유형의 애니메이션 만 가지므로 목표를 달성 할 수 없습니다.

trigger('zoomAndFade', [ 
    transition('page1=> page2', [ 
    query('.content', [ 
     style({fontSize: '1em', opacity: 1}), 
     animate('2s ease-in-out', style({fontSize: '1.5em', opacity: 0})) 
    ]) 
    ]) 

trigger('fade', [ 
    transition('page2=>page1', [ 
    query('.content', [ 
     style({opacity: 1}), 
     animate('2s ease-in-out', style({opacity: 0})) 
    ]) 
    ]) 

하지만 어떻게 내가 애니메이션에 페이지의 상태를 지정할 수 있습니다 내 생각은 그런 일을하는 것입니다?

답변

1

가능합니다. 이 getState 메소드를 app.component에 추가하기 만하면됩니다. 템플릿에서

app.component.ts는

export class AppComponent { 
    getState(outlet) { 
     return outlet.activatedRouteData.state; 
    } 
} 

, 당신은 변경 이벤트에 라우터의 새로운 상태를 얻을 필요가있다.

<main [@routerTransition]="getState(o)"> 
    <router-outlet #o="outlet"></router-outlet> 
</main> 

app.component.html 지금 구성 요소 당신의 애니메이션이 페이지를 구별 할 수 있습니다.

그런 다음 당신은 당신의 transistions

trigger("routerTransition", [ 
    transition("* => settings", slideLeft), 
    transition("settings => *", slideRight), 
]) 

할 수 있습니다하지만 당신 라우터는 데이터
{ 
    path: "settings", 
    component: SettingsComponent, 
    data: { state: "settings" } 
} 

를 전송하는 필요와 애니메이션은 이제 기능을 할 수 입력 :

query(":enter", 
    [ 
     style({ 
      transform: "translateX(100%)" 
     }), 
     animate("0.4s ease-in-out", 
      style({ 
       transform: "translateX(0%)" 
      }) 
     ) 
    ], { 
     optional: true 
    } 
), 
query(":leave", 
    [ 
     style({ 
      transform: "translateX(0%)" 
     }), 
     animate("0.4s ease-in-out", 
      style({ 
       transform: "translateX(-100%)" 
      }) 
     ) 
    ], { 
     optional: true 
    }) 

패키지를 남겨 .json

{ 
    "name": "health", 
    "version": "0.0.0", 
    "license": "MIT", 
    "scripts": { 
    "ng": "ng", 
    "start": "ng serve", 
    "build": "ng build", 
    "test": "ng test", 
    "lint": "ng lint", 
    "e2e": "ng e2e" 
    }, 
    "private": true, 
    "dependencies": { 
    "@angular/animations": "^4.2.4", 
    "@angular/common": "^4.2.4", 
    "@angular/compiler": "^4.2.4", 
    "@angular/core": "^4.2.4", 
    "@angular/forms": "^4.2.4", 
    "@angular/http": "^4.2.4", 
    "@angular/platform-browser": "^4.2.4", 
    "@angular/platform-browser-dynamic": "^4.2.4", 
    "@angular/router": "^4.2.4", 
    "core-js": "^2.4.1", 
    "rxjs": "^5.4.2", 
    "zone.js": "^0.8.14" 
    }, 
    "devDependencies": { 
    "@angular/cli": "1.4.8", 
    "@angular/compiler-cli": "^4.2.4", 
    "@angular/language-service": "^4.2.4", 
    "@types/jasmine": "~2.5.53", 
    "@types/jasminewd2": "~2.0.2", 
    "@types/node": "~6.0.60", 
    "codelyzer": "~3.2.0", 
    "jasmine-core": "~2.6.2", 
    "jasmine-spec-reporter": "~4.1.0", 
    "karma": "~1.7.0", 
    "karma-chrome-launcher": "~2.1.1", 
    "karma-cli": "~1.0.1", 
    "karma-coverage-istanbul-reporter": "^1.2.1", 
    "karma-jasmine": "~1.1.0", 
    "karma-jasmine-html-reporter": "^0.2.2", 
    "protractor": "~5.1.2", 
    "ts-node": "~3.2.0", 
    "tslint": "~5.7.0", 
    "typescript": "~2.3.3" 
    } 
} 
+0

예 오후에이 작업을 시도했지만 오류가 발생하면 _synthetic 속성 @routerTransition이 발생합니다. 제발 "BrowserAnimationsModule"_ 을 포함하십시오.하지만 내 app-module에 BrowserAnimationsModule을 가져 왔습니다. 그래서 나는 왜 내가이 오류가 있는지 이해하지 못한다. – zarnifoulette

+0

죄송합니다. 나는이 오류를 모른다. 나는 당신이 원했던 것과 똑같은 것을 이루려고 노력하고 있었고 이것이 나를위한 완벽한 방법이었습니다. app-module에서 브라우저, BrowserAnimationsModule, AppRoutingModule 및 RouterModule 모듈을 가져 왔으며 가져 오기에도 추가 했습니까? 당신은 app.component에 쿼리, 애니메이션, 스타일 및 가져 오기로 사용하는 모든 것을 필요로합니다. – BO41

+0

예 저는 모든 의존성과 캐시를 정리할 것입니다. 그리고 그게 내 문제를 해결할 수 있기를 바랍니다. 대단히 감사합니다! – zarnifoulette