Angularjsアプリにコントローラーを追加しようとしています。
$scope
を依存関係として使用せずにセットアップし、ルートを使用して使用しているコントローラーを宣言するのは初めてです。
PokemonCtrl
が登録されていない場合、何が間違っていますか?また、ルーティングでコントローラーを宣言した場合、他の場所で宣言する必要はありませんか?
app.js
'use strict';
/**
* @ngdoc overview
* @name pokedexApp
* @description
* # pokedexApp
*
* Main module of the application.
*/
angular
.module('pokedexApp', [
'ngAnimate',
'ngCookies',
'ngResource',
'ngRoute',
'ngSanitize',
'ngTouch'
])
.config(function($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/main.html',
controller: 'MainCtrl',
controllerAs: 'main'
})
.when('/pokemon', {
templateUrl: 'views/pokemon.html',
controller: 'PokemonCtrl',
controllerAs: 'controller'
})
.otherwise({
redirectTo: '/main'
});
});
pokemonCtrl.js
'use strict';
var pokedexApp = angular.module('pokedexApp', []);
pokedexApp.controller('PokemonCtrl', function() {
var vm = this;
vm.text = "Catch em All!"
});
問題は、モジュール定義をオーバーライドしていることです。この行を書くとき:
var pokedexApp = angular.module('pokedexApp', []);
モジュールを定義しています。同じ名前で空の配列を渡して再度呼び出すと、オーバーライドします。モジュールを取得したいだけなら、
var pokedexApp = angular.module('pokedexApp');
PokemonCtrl.jsで、[]
ステートメントからangular.module
を削除する必要があります。
ここで実際に行われているのは、app.jsからモジュールを参照するのではなく、新しいモジュールを生成していることです
ええ、あなたはangular app in app.js
しかし、それをグローバルスコープの変数に割り当てていないので、新しいコントローラーを定義するときのように、後でonに追加できます。後でpokemonCtrl.js
ただし、すべてのAngular Dependencies-ngAnimate
およびngCookies
-は使用できません。また、ルートを使用した構成もセットアップされません。
次のように設定する必要があります。
app.js
// Define your global angular app var
var pokedexApp = angular
.module('pokedexApp', [
'ngAnimate',
'ngCookies',
'ngResource',
'ngRoute',
'ngSanitize',
'ngTouch'
]);
pokedexApp.config(function($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/main.html',
controller: 'MainCtrl',
controllerAs: 'main'
})
.when('/pokemon', {
templateUrl: 'views/pokemon.html',
controller: 'PokemonCtrl',
controllerAs: 'controller'
})
.otherwise({
redirectTo: '/main'
});
});
pokemonCtrl.js
// Adding a note here, I am setting up this controller
// by enclosing the function within an Array, you don't *have* to
// do this, but it helps in the future if this file gets minified
// by letting Angular *know* what the mapping is for this controller's
// dependencies.
pokedexApp.controller('PokemonCtrl', ['$scope', function($scope) {
// you need to let this controller know you want to have access
// to the "scope" -- $scope
$scope.text = "Catch em All!";
}]);
HTMLファイル
<h1>{{text}}</h1>