AngularJSを使用して動的Webアプリケーションを構築しています。 1つのテンプレートに複数のng-view
を含めることは可能ですか?
ng-view
を1つだけ持つことができます。
内容を変更する方法はいくつかあります。 ng-include
、 ng-switch
、またはrouteProviderを使用して異なるコントローラとテンプレートをマッピングする。
UI-Routerは役に立つことができるプロジェクトです: https://github.com/angular-ui/ui-router その機能の1つは複数の名前付きビューです。
UI - ルーターは多くの機能を持っていると私はあなたが高度なアプリで作業している場合はそれを使用することをお勧めします。
Multiple Named Viewsのドキュメントをチェックしてください こちら 。
私はあなたがただ一つのng-view
を持つことによってそれを達成することができると信じます。メインテンプレートでは、サブビュー用にng-include
セクションを作成してから、メインコントローラーで各サブテンプレートのモデルプロパティを定義できます。それらが自動的にng-include
セクションにバインドするように。これは複数のng-view
を持つのと同じです。
ng-include
ドキュメント にある例を確認することができます。
この例では、ドロップダウンリストからテンプレートを変更すると、内容も変更されます。ここではメインのng-view
が1つあり、ドロップダウンを選択して手動でサブコンテンツを選択する代わりに、メインビューがロードされたときのようにします。
通常のng-view
モジュールを使うと、複数の動的テンプレートを持つことはできません。
ただし、 このプロジェクト を使用すると有効になります(ui-router
を探してください)。
複数のビューまたはネストしたビューを持つことができます。しかし、ng-viewによるものではありません。
角度付きのプライマリルーティングモジュールは複数のビューをサポートしません。しかし、あなたはUIルータを使用することができます。これは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>
このサンプルでは、anglejsとangle-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コンテンツはあなたのコントローラにバインドされます。