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