私は非常に単純なデモ Angular アプリケーションを構築して、それが Backbone とどのように比較されるかを確認しています。
<select>
要素が変更されるたびに/LHR
、デモアプリのルートが更新されるようにしたいと思い/SFO
ます/#LHR
。
また、ルーターがページの読み込み時に初期パスを処理し、オプションのデフォルト値を設定するようにしたいと思い<select>
ます。
これが私の HTML です。テンプレートは 1 つしかありません。
<html ng-app="angularApp">
[...]
<body ng-controller="AppCtrl">
<select ng-model="airport" ng-options="item.value as item.name for item in airportOptions" ng-change='newAirport(airport)'></select>
<p>Current value: {{airport}}</p>
</body></html>
そして、ここに私のJSが完全にあります:
var angularApp = angular.module('angularApp', []).
config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/:airportID', {templateUrl: 'angular.html', controller: AppCtrl}).
otherwise({redirectTo: '/'});
}]);
angularApp.controller('AppCtrl', function AppCtrl ($scope, $http, $routeParams) {
$scope.airportOptions = [
{ name: 'London Heathrow', value: 'LHR' },
{ name: 'San Francisco International', value: 'SFO' },
{ name: 'Paris Charles de Gaulle', value: 'CDG' }
];
$scope.airport = $scope.airportOptions[0].value; // Or the route if provided
$scope.newAirport = function(newAirport) {
console.log('newAirport', newAirport);
};
});
ルートプロバイダーを正しく設定したかどうかはまったくわかりませんが、現在、Uncaught ReferenceError: AppCtrl is not defined from angularApp
. 私は何を間違っていますか?
更新: AppCtrl を引用符で囲んで ReferenceError を修正しました。コメント者に感謝します。今私の問題は、$routeParams
に移動しようとすると空になること/#LHR
です。ルートパラメータを取得するにはどうすればよいですか?
更新 2: ルートが機能するようになりました。私はそれを正しくやっていますか?
var angularApp = angular.module('angularApp', []);
angularApp.config(function($routeProvider, $locationProvider) {
$routeProvider.
when('/:airportID', {templateUrl: 'angular.html', controller: "AppCtrl"}).
otherwise({redirectTo: '/'});
});
angularApp.controller('AppCtrl', function AppCtrl ($scope, $routeParams, $location) {
$scope.airportOptions = [
{ name: 'London Heathrow', value: 'LHR' },
{ name: 'San Francisco International', value: 'SFO' },
{ name: 'Paris Charles de Gaulle', value: 'CDG' }
];
var starting_scope = null;
($location.path()) ? starting_scope = $location.path().substr(1) : starting_scope = $scope.airportOptions[0].value;
$scope.airport = starting_scope;
$scope.newLeague = function(newLeague) {
$location.path("/" + newLeague);
}