-1

私の Angular アプリでは、ユーザーがリンクをクリックしたときにインデックス ページに読み込まれるパーシャルをレンダリングしようとしています。次のコードで以前はうまくいきました:

//app.js in Angular
angular.module('myApp', [
  'ngSanitize',
  'ngRoute',
  ...
]).
config(['$routeProvider', '$locationProvider', '$sceDelegateProvider', function($routeProvider, $locationProvider, $sceDelegateProvider) {
  $routeProvider.when('/view1', {templateUrl: 'partials/partial1.html', controller: 'MainController'});
  $routeProvider.when('/File/:fileID', {templateUrl: 'partials/currentFile.html', controller: 'FileController', controllerAs: 'file'});
  $routeProvider.otherwise({redirectTo: '/view1'});
  $sceDelegateProvider.resourceUrlWhitelist([
    'self',
    'https://www.url.com/**']);
  $locationProvider.html5Mode(true);
}]);

しかし、Express を追加すると機能しません。

var express = require("express");
var logfmt = require("logfmt");
var app = express();

app.use(logfmt.requestLogger());

app.use(express.static(__dirname + '/app'));
app.use('/bower_components', express.static(__dirname + '/bower_components'));

app.get('*', function(req, res) {
  res.sendfile('./app/index.html');
});

インデックスページを表示したいだけなら、これでうまくいきます。ただし、次のコードを追加すると、(部分的な) プレーンな HTML が表示されますが、CSS や Javascript は表示されません。

app.get('/partials/currentFile.html', function(req, res) {
    res.render('./app/partials/currentFile.html');
});

Angular で動作するように Express でパーシャルをレンダリングするにはどうすればよいですか? get()、render、sendfile の Express API を調べてみましたが、私の状況ではあまり役に立ちませんでした。他のユーザーは以前にここで同様の質問をしましたが、通常、Express がルーティングする別のファイルが関係しています。Express を含めるファイルを追加するだけで既に問題が発生しているため、余分なファイルを追加せずにそれを実行できるかどうか疑問に思っています。

currentFile.html は、CSS または Javascript 自体をロードしません。Express を追加する前は、すべてのエクストラをロードした index.html にロードされたパーシャルでした。

どんな助けでも大歓迎です。ありがとうございました

4

1 に答える 1

0

問題を直接修正しませんでしたが、回避しました。問題は、パーシャルをインデックス ページにレンダリングしたかったことです。このアプリの最も重要な目標は単一ページのアプリケーションであるため、最終的に重要なのは 1 つのページだけです。

テスト用にレンダリングするさまざまなパーシャルがあればよかったのですが、残念ながら、私が何を求めているのか、問題を複雑にしているのかを誰も知らないようです。いずれにせよ、他のすべてのパーシャルを取り除き、すべての URL 要求を単一ページ アプリにリダイレクトするだけで、回避する方法を見つけました。

config(['$routeProvider', function($routeProvider) {
  $routeProvider.when('/view1', {templateUrl: 'partials/partial1.html', controller: 'MainVideoController'});
  $routeProvider.when('/view2', {templateUrl: 'partials/partial2.html', controller: 'MyCtrl2'});
  $routeProvider.when('/file', {templateUrl: 'partials/currentFile.html', controller: 'FileController', controllerAs: 'file'});
  $routeProvider.otherwise({redirectTo: '/file'});
...

domain.com/view1 または /view2 にアクセスしようとすると、パーシャル view1 および view2 が機能しないことに注意してください。

于 2014-05-31T05:09:43.343 に答える