2017-04-09 76 views
1

我正在尝试使用Angular创建单个页面的应用程序。路由我在后端使用Node/Express。虽然Express正确地提供了我的静态index.html,但我的部分.html页面没有被拉入我的ng-view中。角度路由不能使用Express

这里就是视图与通话的角度应用拖着走在HTML:

<body ng-app="app"> 
    <nav class="navbar navbar-inverse bg-inverse navbar-fixed-top topnav" role="navigation"> 
     <div class="container topnav"> 
      <div class="navbar-header"> 
       <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> 
        <span class="sr-only">Toggle navigation</span> 
        <span class="icon-bar"></span> 
        <span class="icon-bar"></span> 
        <span class="icon-bar"></span> 
       </button> 
       <a class="navbar-brand topnav" href="/">DtepDC</a> 
      </div> 
      <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> 
       <ul class="nav navbar-nav navbar-right"> 
        <li> 
         <a href="/movies">Movies App</a> 
        </li> 
        <li> 
         <a href="mailto:[email protected]">Contact</a> 
        </li> 
       </ul> 
      </div> 
     </div> 
    </nav> 

    <div ng-view></div> 

这里是我的角路由代码:

 app.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) { 
     $routeProvider 
     .when("/", { 
      templateUrl: "intro-header.html" 
     }) 
     .when("/movies", { 
      templateUrl: "#!/movies.html", 
      controller: "moviesCtrl" 
     }). 
     otherwise({ 
      redirect: '/' 
     }); 
     $locationProvider.html5Mode(true); 
    }]); 

这里是我的Express服务器.js文件代码:

var express = require('express'); 
var path = require('path'); 
var app = express(); 

app.set('port', 3000); 
app.use('/', express.static(__dirname + '/')); 

app.use(function(req, res) { 
res.sendFile(__dirname + '/index.html'); 
}); 

app.get('/', function(req, res) { 
    res.sendFile(path.join(__dirname + '/index.html')); 
}); 

var server = app.listen(app.get('port'), function() { 
var port = server.address().port; 
console.log('Running server at http://localhost:' + port + '/'); 
}); 

这里是我的工厂代码和我有包括调用应用角度:

var app = angular.module("app", ["ngRoute"]); 

app.factory("getMovie", ["$http",function($http){ 
    var obj = {}; 
    var url = "https://api.nytimes.com/svc/movies/v2/reviews/search.json"; 
    obj.getMovieInfo = function(title){ 
     return $http({ 
      url: url, 
      method: "GET", 
      params:{ 
       query: title, 
       api_key: "68094e1974e7984c256beb1653319915:3:33678189", 
       callback: "JSON_CALLBACK" 
      }, 
      headers: { 
       "Content-Type" : "application/json" 
      } 
      }).then(function successCallback(response) { 
        return response.data.results; 
      }, function errorCallback(response) { 
        console.log("Nothing to see here..."); 
      }); 
      } 
     return obj; 
}]); 

这里是我的控制器代码:

 app.controller("moviesCtrl", ["$scope", "getMovie",  function($scope, getMovie){ 
    $scope.findMovie = function() { 
     getMovie.getMovieInfo($scope.title).then(function(response){ 
      $scope.results = response; 
     }); 
    }  
}]); 

这是我与控制器HTML块:

<h2>Movie Search</h2> 
     <!-- START row --> 
     <div ng-controller="moviesCtrl"> 
      <div> 
       <div class="col-sm-12" class="form-group">     
        <form name="myForm" class="form-inline"> 

         Find a NYTimes movie review based on its title (or part of a title): <input type="string" class="form-control" ng-model="title"> 
         <input type="submit" value="Search" class="btn btn-success" ng-click="findMovie()" /> 
        </form> 
       </div> 
      </div> 
       <div class="col-sm-6"> 
         <div ng-cloak ng-repeat="result in results | filter: { display_title: title }" class="row results"> 
          <img src="{{ result.multimedia.src }}" height="{{ result.multimedia.height }}" width="{{ result.multimedia.width }}" class="pull-left"/> 
          <div class="col-sm-6 pull-left"> 
           <div><strong><em><a href="{{ result.link.url }}">{{ result.display_title }}</a></em></strong></div> 
          {{ result.summary_short }}</div> 
          <div class="clearfix"></div> 
         </div> 
       </div> 
      </div> 

提前感谢!

+0

你能告诉我们你的控制器和你的HTML, – Sorikairo

+0

我刚刚更新了,感谢您的JS,让我知道你需要什么。谢谢! –

+0

使用ng_view的html部分可能会有用。 – Sorikairo

回答

0

你可以简单地添加到您的路线

/* ANGULAR MAIN ROUTE */ 
router.get('*', function(req, res) { 
    res.sendfile('./public/index.html'); 
});