6

AngularJS のルーティングとコントローラーに問題があります。コードは次のとおりです。

索引.html

<!DOCTYPE html>
<html ng-app="contacts">
<head>
    <script src="libs/angular.min%20(1).js"></script>
    <script src="contacts.js"></script>
    <script src="index.js"></script>
    <title></title>
</head>
<body >

    <div data-ng-view=""></div>


</body>
</html>

index.js

var myApp = angular.module('contacts', []);

myApp.config(function ($routeProvider) {
    $routeProvider
     .when('/', { controller: 'ContactsCtrl', templateUrl: '/views/show-contacts.html' })
     //.when('/view2', { controller: 'MyCont', templateUrl: 'V2.htm' })
     .otherwise({ redirectTo: '/' });
});

contact.js

var myApp = angular.module('contacts', []);
myApp.controller('ContactsCtrl', function ($scope) {
    $scope.name = "omar";
});

しかし、私はこのエラーが発生しています:

引数 'ContactsCtrl' は関数ではありません。未定義です

何か助けはありますか?

4

3 に答える 3

19

次のように index.html を変更します。

<script src="index.js"></script>
<script src="contacts.js"></script>

そして、あなたの contact.js の変更で

var myApp = angular.module('contacts', []);

var myApp = angular.module('contacts');

like のような 2 つの引数を持つ Angular モジュールangular.module('contacts', []);は新しいモジュールを作成しますが、単一の引数 likeangular.module('contacts');を持つ angular モジュールは既存のモジュールを取得します。この場合はこちら'contacts'

于 2013-08-22T11:07:44.163 に答える
10

でアプリを再定義してindex.jsいるため、 で作成されたコントローラーcontacts.jsは失われます。index.jsから次の行を削除します。

var myApp = angular.module('contacts', []);
于 2013-08-22T11:05:05.827 に答える
1

2 つの異なるモジュール名を作成することをお勧めします。1 つは index.js (これは html ng-app 属性で参照するアプリ名になります) に、もう 1 つは contact.js (コントローラーのモジュール名) に作成することをお勧めします。index.js で、contacts.js` への依存関係を作成します。以下を実行することで問題を解決できました。

更新されたcontacts.jsここで、連絡先をcontactsControllerに更新しました

var myApp = angular.module('contactsController', []);
myApp.controller('ContactsCtrl', function ($scope) {
$scope.name = "omar";
});

更新された index.jsここで、contactsController を依存関係として追加しました。これには app.js という名前を付ける方が簡単であることがわかりました。このように、ng-app は常に app.js のモジュール名にマップされます。

 var myApp = angular.module('contacts', [contactsController]);

  myApp.config(function ($routeProvider) {
   $routeProvider
    .when('/', { controller: 'ContactsCtrl', templateUrl: '/views/show-contacts.html' })
   //.when('/view2', { controller: 'MyCont', templateUrl: 'V2.htm' })
   .otherwise({ redirectTo: '/' });
   });
于 2014-02-20T05:29:36.493 に答える