5

Symfony2 バンドル内で AngularJS 1.4 アプリケーションを開発しています。Symfony は「バックエンド」(API) を提供し、Angular はフロントエンド (もちろん) を提供します。

私は新しいルーターを使用しており、いくつかのガイドとベスト プラクティスの例で提案されているコンポーネント駆動のフォルダー アプローチに固執しています。しかし、gulp を使用して JavaScript をビルドし、完全なビルド ファイルのみを含めるため、Angular コントローラーがテンプレートを見つけられないという問題があります。

私が好きではない私の解決策をお見せします:

(function () {
'use strict';
angular
    .module('myModule', ['ngNewRouter', 'myModule.dashboard'])
    .config(TemplateMapping)
    .controller('AppController', AppController);

/* @ngInject */
function AppController ($router) {
    $router.config([
        { path: '/', redirectTo: '/dashboard' },
        { path: '/dashboard', component: 'dashboard' }
    ]);
}

/* @ngInject */
function TemplateMapping($componentLoaderProvider) {
    $componentLoaderProvider.setTemplateMapping(function (name) {
        return {
            'dashboard': '/bundles/mybundle/templates/dashboard/dashboard.html'
        }[name];
    });
}
}());

Angular コードを記述しsrc/myBundle/Resources/js/、gulp によって最終ビルドが配置src/myBundle/Resources/public/され、Angular アプリを保持する Twig テンプレートで使用できるようになります。

私が現在行っていることは、基本的に、コンポーネントのテンプレートを、それらが属する場所ではなく (src/myBundle/Resources/js/components/dashboard/ダッシュボードの例の場合) に配置することsrc/myBundle/Resources/public/templatesです。

を介して、テンプレートが別の場所にあることをルーターに伝える必要があります$componentLoaderProvider.setTemplateMapping()

2 つの質問があります。

  1. このテンプレートの場所の問題をよりエレガントな方法で解決できますか?
  2. AppControllerテンプレートの場所をルータに直接( で)伝えることはできますか。
4

3 に答える 3