[英]Angular JS / Ruby on Rails - controller not recognised error
我一直在關注Thinkster教程,以實現Angular JS / Ruby on Rails應用程序,但遇到了一些困難。
盡管在檢查內容時頁面的源代碼中列出了我的控制器,但我的控制器沒有被識別。 此錯誤通過控制台錯誤突出顯示Error: [ng:areq] Argument 'NavCtrl' is not a function, got undefined
。
我已經嘗試了所有可以在網上找到的內容,但無濟於事。 我目前唯一的猜測是它是由於Angular,Rails,gem,依賴項的版本-或我只是沒有考慮過的某些原因。 還是錯別字,但我沒發現!
最終結果是加載了空白頁面,但導航欄的內容除外,該內容沒有控制器邏輯即可呈現。 我將在下面顯示一些代碼,如果需要其他任何答案,請告訴我。
這是application.html.erb
:
<!DOCTYPE html>
<html>
<head>
<title>Angular JS</title>
<%= stylesheet_link_tag 'application', media: 'all' %>
<%= javascript_include_tag 'application' %>
<%= csrf_meta_tags %>
</head>
<!-- body -->
<body ng-app="flapperNews">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<div ng-include="'nav/_nav.html'"></div>
<ui-view></ui-view>
</div>
</div>
<h1>DEBUG</h1>
</body>
</html>
app.js
,其中包含應用程序模塊和視圖配置:
angular.module('flapperNews', ['ui.router', 'templates', 'Devise'])
.config([
'$stateProvider',
'$urlRouterProvider',
function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('home', {
url: '/home',
templateUrl: 'home/_home.html',
controller: 'MainCtrl'
})
.state('posts', {
url: '/posts/{id}',
templateUrl: 'posts/_posts.html',
controller: 'PostsCtrl'
})
.state('login', {
url: '/login',
templateUrl: 'auth/_login.html',
controller: 'AuthCtrl',
onEnter: ['$state', 'Auth', function($state, Auth) {
Auth.currentUser().then(function (){
$state.go('home');
});
}]
})
.state('register', {
url: '/register',
templateUrl: 'auth/_register.html',
controller: 'AuthCtrl',
onEnter: ['$state', 'Auth', function($state, Auth) {
Auth.currentUser().then(function (){
$state.go('home');
});
}]
});
$urlRouterProvider.otherwise('home');
}]);
值得注意的是,在上面的兩個文件之間, <div ng-include="'nav/_nav.html'"></div>
至少呈現了一些 Angular內容,而<ui-view></ui-view>
顯示“一無所有”( 不相關的鏈接 )。
這是AWOL navCtrl.js
:
angular.module('flapperNews')
.controller('NavCtrl', [
'$scope',
'Auth',
function($scope, Auth){
console.log('nav controller loaded');
$scope.signedIn = Auth.isAuthenticated;
$scope.logout = Auth.logout;
Auth.currentUser().then(function (user){
$scope.user = user;
});
$scope.$on('devise:new-registration', function (e, user){
$scope.user = user;
});
$scope.$on('devise:login', function (e, user){
$scope.user = user;
});
$scope.$on('devise:logout', function (e, user){
$scope.user = {};
});
}]);
查看控制台,時間軸和源,似乎所有相關文件都以正確的順序加載。 所以請幫忙!
謝謝,史蒂夫。
我認為您忘記了在.state('posts'...和.state('home'...
.state('home', {
url: '/home',
templateUrl: 'home/_home.html',
controller: 'MainCtrl',
resolve: {
postPromise: ['posts', function(posts){
return posts.getAll();
}]
}
})
.state('posts', {
url:'/posts/{id}',
templateUrl: 'posts/_posts.html',
controller:'PostCtrl',
resolve: {
post: ['$stateParams', 'posts', function($stateParams, posts) {
return posts.get($stateParams.id);
}]
}
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.