7

방금 ​​새 프로젝트를 시작했습니다. 필자는 전체 화면 브라우저 (주소 표시 줄, 고정 해상도)로 원격 제어 장치에서 실행될 웹 응용 프로그램을 "기본 느낌과 함께"구축하고 있습니다. UI는 기본적으로 여러 개의 전체 화면보기로 구성됩니다. AngularJS는 현재 여러 가지 이유로 선택의 무기입니다. 나는 'ui-router'와 그 'states'에 다양한 견해를 구성하려고 노력해 왔습니다. 예를 들면 다음과 같습니다.AngularJS ui-router의 대안

/#/desktop 
/#/menu 
/#/videoStore/posterView 
/#/videoStore/listView 

필자는 템플릿, 컨트롤러 및보기 당 URL이 있습니다. 보기를 전환 할 때 페이지가 다시로드되지 않는다는 사실이 가장 중요합니다. 그러나 내가 부족한 부분이 있습니다.

더블 버퍼링

나는 그것을 전환하기 전에 다음 상태/뷰를 준비 할 수 있어야합니다. ui-router이 아닌이되는 일련의 이벤트를 제공합니다. onEnter, $stateChangeStart$stateChangeSuccess은 모두 state/view controller이 구성되기 전에 호출됩니다. 차라리 이러한 이벤트를 에 전환하기 전에 컨트롤러라고 부릅니다. 예를 들어 onStart이 처음 시작될 때 onResume 이력서에 표시됩니다.

역사 동작

상태는 템플릿이 다시 DOM에 추가되고 새로운 컨트롤러가 인스턴스화 의미, 내가 입력 할 때마다 재구성 할 것으로 보인다. 이는 불필요하며 성능을 저하시킵니다. videoStore를 떠날 때 메뉴를 재구성 할 필요가 없습니다. 사실, 하위 폴더의 같은 항목에 초점을 맞추어 다시 만들지 않고도 정확히 동일하게 유지하려고합니다.

나는 확실히 키 중 하나를 올바른 상태/뷰 또는 서브 뷰에 갈 수 있도록하는 방법을 알아 내지 못했다 Keyhandling. 본문에 리스너를 추가하고 현재 범위로 키를 보내는 것을 고려했습니다. 한 상태 내에서 여러보기를 가질 때 어떤 범위가 "활성"인지에 대한 불확실성으로 인해 그렇게 할 것이라고는 생각하지 않지만. 상태 /보기 컨트롤러에 어떤 종류의 onFocus 이벤트가 좋을 것입니다. 또한 $$ (private) 필드를 탐색하지 않는 한 각도에서 "활성"범위를 가져올 수있는 방법이없는 것으로 보입니다.

괜찮습니다. 읽어 주셔서 감사합니다.

여기 내 질문은 :

  • ui-router와 함께 "할 수 있도록"그들의 어떤 방법이 있나요? 나는 그것을 단지 이틀 동안 평가했고 충분히 놓친 것 같다.
  • ui-router에 대한 가치있는 Angularjs 대안이 있습니까?
  • 거기에 내가 설명하는 것과 유사한 것들을 수행하는 다른 Javascript 프레임 워크가 있습니까?
+0

언급 할 가치가 있습니다. 대상 장치가 약하고 브라우저가 필요합니다. – Hampus

+0

어떻게 문제를 해결합니까? – Chexpir

+0

@Hampus, 어떻게 문제를 해결했는지 궁금합니다. ui-router가 앱을 만드는 방법에 대한 가정은 또한 '기본 느낌'에 대한 나의 욕구를 제한하고 있습니다. 당신이 무엇을하기로 결심했는지 알고 싶습니다. –

답변

2

ui-router는 괜찮습니다. 나열된 대부분의 문제에 관해서는 컨트롤러에서 수행하는 코드의 양을 최소화하고 팩토리/서비스/공급자로 이동해야 할 필요가있는 것처럼 보입니다. 이렇게하면 데이터를 가져 오는 방법을보다 세밀하게 제어 할 수 있습니다.

DOM과 관련하여 중첩 된 상태를 올바르게 사용하면 상태 간 전환시 탐색이나 다른 부분이 실제로 다시로드되지 않아야합니다.

키보드 처리는 기본 프레임 워크에 관계없이 어려운 문제입니다. 포커스를 변경하는 지시문을 사용하여 체크 아웃 할 수 있습니다 (사용할 수있는 것이 없으면 검색을 수행 한 다음 여기에서 자신 만의 롤을 배워보십시오. 여기서는 tabindex가 충분하지 않다고 가정합니다).

ngRoute 또는 uiRouter가 클라이언트 측 라우팅과 관련이 있으며 uiRouter가 더 많은 기능을 제공하는 한 귀하의 옵션입니다.

"더 좋은"프레임 워크가 있다면, 주로 의견 (주관적)에 근거하거나 기술을 판단 할 수있는 매개 변수가 알려지지 않은 질문은 StackOverflow에 적합하지 않습니다.

+1

감사합니다 shaunhusain. 컨트롤러 로직을 서비스에 넣고 싶지 않습니다. 좋아요, 나는 서비스를 통해 미리 데이터를 가져 와서 캐시에서 서비스를 통해 컨트롤러로 읽을 수 있습니다. 그러나보기에 맞게 데이터를 마사지하는 것은 뷰 전환 전에 수행해야하는 컨트롤러 논리입니다. 또한, 나는 이해하지 못할 수도 있습니다. ui-router는 형제를 횡단하는 동안 컨트롤러를 재구성하고 DOM을 다시 삽입합니다. 그렇지 않으면 어떻게해야합니까? – Hampus

+0

일반적으로 형제보기가 변경되면 형제 컨트롤러가 다시 작성되지 않고 변경된 UI보기 섹션 자체 및 상태 변경이 발생하면 자식이 작성/재 작성되지만 형제 또는 상위 뷰의 컨트롤러는 다시 작성됩니다 변경되지 않습니다, 여기에 콘솔을 참조하십시오 : http://plnkr.co/edit/xrLsMR9czHyFRStQ0Crv?p=preview – shaunhusain

+0

당신이 무슨 말하는지 모르겠어요. 당신의보기에서. contacts.list substate와 contacts.details substate에 컨트롤러를 추가하면 상태가 입력 될 때마다이 컨트롤러가 생성됩니다. 상위 상태 컨트롤러를 사용한 적이 없기 때문에 상위 컨택트 컨트롤러는 다시 생성되지 않습니다. – Hampus