Menggunakan AngularJS dengan Scala Bermain, saya'm mendapatkan kesalahan ini.
Kesalahan: Argumen 'MainCtrl' tidak fungsi, punya undefined
I'm mencoba untuk membuat sebuah tabel yang terdiri dari hari-hari dalam seminggu.
Silakan lihat di kode saya. Saya telah memeriksa nama Controller, tapi itu tampaknya benar. Catatan: Kode yang digunakan dari ini JADI jawaban
index.scala.html
@(message: String)
@main("inTime") {
<!doctype html>
<html lang="en" ng-app>
<head>
<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
</head>
<div ng-controller="MainCtrl">
<table border="1">
<tbody ng-repeat='(what,items) in data'>
<tr ng-repeat='item in items'>
<td ngm-if="$first" rowspan="{{items.length}}">{{what}}</td>
<td>{{item}}</td>
</tr>
</tbody>
</table>
</div>
</html>
}
MainCtrl.js
(function() {
angular.module('[myApp]', []).controller('MainCtrl', function($scope) {
$scope.data = {
Colors: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
}
});
}());
Menghapus []
dari nama ([myApp]) dari modul
angular.module('myApp', [])
Dan tambahkan ng-app="myApp"
untuk html dan harus bekerja.
PERTAMA.
periksa apakah anda telah benar controller
di rute definisi, sama seperti controller nama yang anda mendefinisikan
communityMod.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('/members', {
templateUrl: 'modules/community/views/members.html',
controller: 'CommunityMembersCtrl'
}).
otherwise({
redirectTo: '/members'
});
}]);
communityMod.controller('CommunityMembersCtrl', ['$scope',
function ($scope) {
$scope.name = 'Hello community';
}]);
kontroler yang berbeda, nama dalam contoh ini akan menyebabkan kesalahan, tapi ini adalah contoh yang benar
DETIK periksa apakah anda telah mengimpor file javascript:
<script src="modul/komunitas/controllers/CommunityMembersCtrl.js"></script>
Saya mendapat pesan kesalahan yang sama (dalam kasus saya : "Argumen 'languageSelectorCtrl' tidak fungsi, punya terdefinisi").
Setelah beberapa membosankan dibandingkan dengan Sudut benih's kode, saya menemukan bahwa saya sebelumnya telah dihapus referensi untuk pengendali modul di app.js. (tempat di https://github.com/angular/angular-seed/blob/master/app/js/app.js)
Jadi saya punya ini:
sudut.modul('MyApp', ['MyApp.filter', 'MyApp.jasa', 'MyApp.arahan'])
Ini gagal.
Dan ketika saya menambahkan referensi yang hilang:
sudut.modul('MyApp', ['MyApp.filter', 'MyApp.jasa', 'MyApp.pengendali', 'MyApp.arahan'])
Pesan kesalahan menghilang dan Sudut bisa instanciate pengendali lagi.
Beberapa kali kesalahan ini adalah akibat dari dua ng-app
arahan yang ditentukan dalam html.
Dalam kasus saya oleh kesalahan aku telah ditentukan ng-app` di
htmltag dan ``ng-app="myApp"`` dalam
tubuh`` tag seperti ini:
<html ng-app>
<body ng-app="myApp"></body>
</html>
Ini serius butuh waktu 4 JAM (termasuk pencarian tak berujung pada BEGITU) tapi akhirnya saya menemukan ini: oleh kesalahan (tidak sengaja) saya menambahkan ruang di suatu tempat.
Dapatkah anda melihat itu?
sudut.modul('bwshopper.pendaftaran').controller('SignupCtrl ', SignupCtrl);
Jadi ... 4 jam kemudian saya melihat bahwa itu harus:
sudut.modul('bwshopper.pendaftaran').controller('SignupCtrl', SignupCtrl);
Hampir mustahil untuk melihat dengan mata telanjang.
Ini menekankan betapa pentingnya revisi control (git atau apapun) dan unit/pengujian regresi.
Saya mengalami masalah yang sama dan dalam kasus saya itu terjadi sebagai akibat dari masalah ini:
Saya memiliki pengendali didefinisikan dalam modul terpisah (disebut 'myApp.pengendali') dan disuntikkan ke aplikasi utama modul (disebut 'myApp') seperti ini:
angular.module('myApp', ['myApp.controllers'])
Seorang rekan didorong lain controller module di file terpisah tetapi dengan nama yang sama persis seperti tambang (yaitu 'myApp.pengendali' ) yang menyebabkan kesalahan ini. Saya pikir karena Sudut bingung antara mereka controller modul. Namun pesan kesalahan tidak sangat membantu dalam menemukan apa yang salah.
Dalam kasus saya (memiliki gambaran halaman dan "tambahkan" halaman) aku punya ini dengan routing setup seperti di bawah ini. Itu memberikan pesan untuk AddCtrl yang tidak bisa disuntikkan...
$routeProvider.
when('/', {
redirectTo: '/overview'
}).
when('/overview', {
templateUrl: 'partials/overview.html',
controller: 'OverviewCtrl'
}).
when('/add', {
templateUrl: 'partials/add.html',
controller: 'AddCtrl'
}).
otherwise({
redirectTo: '/overview'
});
Karena ketika('/'
rute semua rute saya pergi ke gambaran dan controller tidak bisa dicocokkan pada /menambah rute rendering halaman. Ini membingungkan karena aku melihat add.html template tapi controller adalah tempat yang akan ditemukan.
Menghilangkan '/'-rute ketika kasus ini tetap masalah untuk saya.
Ymed's titik kedua adalah perangkap tapi hanya untuk catatan, mungkin itu's membantu seseorang di suatu tempat:
Aku punya masalah yang sama dan tepat sebelum aku pergi gila saya menemukan bahwa saya lupa untuk memasukkan saya controller script.
Seperti saya aplikasi ini didasarkan pada ASP.Net MVC aku memutuskan untuk menjaga diri waras dengan memasukkan cuplikan berikut saya App_Start/BundleConfig.cs
bundles.Add(new ScriptBundle("~/app").Include(
"~/app/app.js",
"~/app/controllers/*.js",
"~/app/services/*.js" ));
dan di tata Letak.cshtml
<head>
...
@Scripts.Render("~/app")
...
</head>
Sekarang saya tidak't harus berpikir tentang termasuk file secara manual lagi. Di belakang saya benar-benar harus melakukan ini ketika mengatur proyek...
Jika anda berada di sebuah submodule, don't lupa untuk menyatakan modul dalam aplikasi utama. yaitu :
<scrip>
angular.module('mainApp', ['subModule1', 'subModule2']);
angular.module('subModule1')
.controller('MyController', ['$scope', function($scope) {
$scope.moduleName = 'subModule1';
}]);
</script>
...
<div ng-app="mainApp">
<div ng-controller="MyController">
<span ng-bind="moduleName"></span>
</div>
Jika anda don't menyatakan subModule1 di mainApp, anda akan mendapat "[ng:areq] Argumen "MyController" tidak fungsi, harus terdefinisi.
Aku punya waras kesalahan dengan LoginController, yang saya digunakan di utama index.html. Saya menemukan dua cara untuk menyelesaikan:
aplikasi.config(['$controllerProvider', function($controllerProvider) { $controllerProvider.allowGlobals(); }]);
sebelum
LoginController.$inject = ['$rootScope', '$scope', '$location'];
sekarang
app.controller('LoginController', ['$rootScope', '$scope', '$location', LoginController]);
'aplikasi' berasal dari app.js
var MyApp = {};
var app = angular.module('MyApp ', ['app.services']);
var services = angular.module('app.services', ['ngResource', 'ngCookies', 'ngAnimate', 'ngRoute']);
Saya memiliki kesalahan yang sama dengan kesalahan besar:
appFormid.controller('TreeEditStepControlsCtrl', [$scope, function($scope){
}]);
Anda melihat ? aku lupa '' sekitar $pertama ruang lingkup, sintaks yang tepat tentu saja adalah:
appFormid.controller('TreeEditStepControlsCtrl', ['$scope', function($scope){
}]);
Sebuah kesalahan pertama saya didn't see immediatly adalah: "$ruang lingkup yang tidak didefinisikan", diikuti oleh "Kesalahan: [ng:areq] Argumen 'TreeEditStepControlsCtrl' tidak fungsi, punya terdefinisi"
Bisa sesederhana melampirkan aset anda di " " dan apa pun yang membutuhkan kutipan di dalam dengan ' '?
<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
menjadi
<link rel="stylesheet" media="screen" href="@routes.Assets.at('stylesheets/main.css')">
Yang bisa menyebabkan beberapa masalah dengan parsing
Dalam kasus saya itu sederhana typo di index.html
:
<script src="assets/javascript/controllers/questionssIndexController.js"></script>
yang seharusnya
<script src="assets/javascript/controllers/questionsIndexController.js"></script>
tanpa tambahan s
di controller's nama.