AngularJS를 사용하여 동적 웹 앱을 작성 중입니다. ng-view
단일 템플릿에 여러 개를 가질 수 있습니까?
AngularJS를 사용하여 동적 웹 앱을 작성 중입니다. ng-view
단일 템플릿에 여러 개를 가질 수 있습니까?
답변:
하나만 가질 수 있습니다 ng-view
.
여러 가지 방법으로 내용을 변경할 수 있습니다 ng-include
, ng-switch
또는 routeProvider을 통해 매핑 다른 컨트롤러 및 템플릿.
ng-show
및 ng-hide
변수를 사용하여 가시성을 제어 할 수? 때로는 여러 구성 요소를 숨기거나 표시하고 싶을 수도 있습니다.
UI-Router 는 다음을 도와 줄 수있는 프로젝트입니다. https://github.com/angular-ui/ui-router 그 기능 중 하나는 다중 명명 된 뷰입니다
UI-Router에는 많은 기능이 있으며 고급 앱에서 작업하는 경우 사용하는 것이 좋습니다.
나는 당신이 단 하나를 갖는 것으로 그것을 달성 할 수 있다고 생각합니다 ng-view
. 기본 템플릿에는 ng-include
하위 뷰에 대한 섹션 이있을 수 있으며 기본 컨트롤러에서 각 하위 템플릿에 대한 모델 속성을 정의합니다. ng-include
섹션에 자동으로 바인딩됩니다 . 이것은 여러 개를 갖는 것과 같습니다ng-view
문서에 주어진 예제를 확인할 수 있습니다ng-include
이 예제에서는 드롭 다운 목록에서 템플릿을 변경하면 내용이 변경됩니다. 여기에는 하나의 기본이 ng-view
있고 드롭 다운을 선택하여 하위 컨텐츠를 수동으로 선택하는 대신 기본보기가로드 될 때와 같이 수행 한다고 가정하십시오 .
일반 ng-view
모듈을 사용하면 둘 이상의 동적 템플릿을 가질 수 없습니다.
그러나이 프로젝트를 사용하면 그렇게 할 수 있습니다 (를 찾으십시오 ui-router
).
여러 개의 또는 중첩 된 뷰를 가질 수 있습니다. 그러나 ng-view가 아닙니다.
각도의 기본 라우팅 모듈은 여러보기를 지원하지 않습니다. 그러나 ui-router를 사용할 수 있습니다. 이것은 Github, angular-ui / ui-router, https://github.com/angular-ui/ui-router 를 통해 얻을 수있는 타사 모듈입니다 . 또한 현재 ngRouter (ngNewRouter)의 새로운 버전이 개발되고 있습니다. 현재 안정적이지 않습니다. ui-router를 사용한 간단한 시작 예제를 제공합니다. 이를 사용하여 뷰 이름을 지정하고 렌더링에 사용해야하는 템플릿과 컨트롤러를 지정할 수 있습니다. $ stateProvider를 사용하여 특정 위치에 대해 뷰 자리 표시자를 렌더링하는 방법을 지정해야합니다.
<body ng-app="main">
<script type="text/javascript">
angular.module('main', ['ui.router'])
.config(['$locationProvider', '$stateProvider', function ($locationProvider, $stateProvider) {
$stateProvider
.state('home', {
url: '/',
views: {
'header': {
templateUrl: '/app/header.html'
},
'content': {
templateUrl: '/app/content.html'
}
}
});
}]);
</script>
<a ui-sref="home">home</a>
<div ui-view="header">header</div>
<div ui-view="content">content</div>
<div ui-view="bottom">footer</div>
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/angular-ui-router/release/angular-ui-router.js">
</body>
이 샘플에서는 angularjs 및 angular-ui.router를 참조해야합니다.
$ bower install angular-ui-router
여러 개의 ng-view를 가질 수 없습니다. 아래는 요구 사항을 해결 한 유스 케이스입니다. 모델 대화 상자에서 탭 동작을 원했습니다. 라우터 링크를 호출하는 하이퍼 링크가있는 탭을 클릭하면 문제가 발생했습니다. 탭에 버튼과 CSS를 사용 하여이 문제를 해결했습니다. 사용자가 탭을 클릭하면 실제로 ng-router를 항상 호출하는 하이퍼 링크를 호출하지 않습니다. 사용자가 탭을 클릭하면 HTML을 동적으로로드하는 메소드가 호출됩니다. 아래는 탭 클릭시 기능입니다
self.submit = function(form) {
$templateRequest('resources/items/employee/test_template.html').then(function(template){
var compiledeHTML = $compile(template)($scope);
$("#d").replaceWith(compiledeHTML);
});
사용자 $ templateRequest. test_template.html 페이지에서 html 컨텐츠를 추가하십시오. 이 html 컨텐츠는 컨트롤러에 바인딩됩니다.