ホームページ >ウェブフロントエンド >jsチュートリアル >私の AngularJS コントローラーが関数ではないのはなぜですか?それを修正するにはどうすればよいですか?

私の AngularJS コントローラーが関数ではないのはなぜですか?それを修正するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-02 17:55:11951ブラウズ

Why is my AngularJS Controller Not a Function, and How Can I Fix It?

AngularJS のコントローラーが関数ではないエラー: 問題を解決するための包括的なガイド

AngularJS を使用しているときに、次のようなエラーが発生する場合があります。コントローラーは関数ではありません。このエラーは通常、コントローラーをグローバルに定義しようとしたときに発生しますが、これは AngularJS 1.3 では許可されなくなりました。この問題を解決するには、module.controller 構文を使用してコントローラーを明示的に登録する必要があります。

解決策 1: module.controller 構文を使用してコントローラーを登録する

コントローラーを定義するにはmodule.controller 構文を使用する場合は、次のとおりです手順:

angular.module('app', [])
    .controller('ContactController', ['$scope', function ContactController($scope) {
        // Controller logic here
    }]);

解決策 2: $inject アノテーションと AngularJS 1.3.5 を使用する

AngularJS バージョン 1.3.5 以降では、$inject アノテーションを使用できます。アノテーションを使用してコントローラーの依存関係を定義します。このアノテーションは、コントローラー関数の先頭に配置する必要があります。

function ContactController($scope) {
    $scope.contacts = ["[email protected]", "[email protected]"];

    $scope.add = function() {
        $scope.contacts.push($scope.newcontact);
        $scope.newcontact = "";
    };
}
ContactController.$inject = ['$scope'];
angular.module('app', []).controller('ContactController', ContactController);

グローバル コントローラーを再有効化する (オプション)

AngularJS 1.3 では厳密なスコープが強制され、これにより以下のことが禁止されます。グローバルコントローラー宣言。ただし、モジュール設定で allowedGlobals オプションを使用すると、グローバル コントローラーを再度有効にすることができます。

angular.module('app')
    .config(['$controllerProvider', function($controllerProvider) {
        $controllerProvider.allowGlobals();
    }]);

追加の考慮事項:

  • 次のことを確認してください。 app は HTML ファイルのルート要素に設定されています。
  • 正しいスクリプトが含まれていることを確認してください
  • 以前に登録されたエンティティが消去される可能性があるため、同じモジュールを複数回定義しないでください。

これらの解決策に従うことで、「コントローラーは関数ではありません」問題を正常に解決できます。 AngularJS の「エラー」を解決し、コントローラーを効果的に定義します。

以上が私の AngularJS コントローラーが関数ではないのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。