亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

控制器不是函數,而是未定義的,同時全局定義控制器。

控制器不是函數,而是未定義的,同時全局定義控制器。

慕虎7371278 2019-06-13 14:41:29
控制器不是函數,而是未定義的,同時全局定義控制器。我正在使用angularjs編寫一個示例應用程序。下面提到了一個在Chrome瀏覽器上提到的錯誤。錯誤是錯誤:[Ng:areq]http:/errors.angularjs.org/1.3.0-beta.17/ng/areq?p0=ContactController&p1=Not%20a%20 function%2C%20 get%20未定義呈現為參數‘ContactController’不是函數,未定義電碼<!DOCTYPE html><html ng-app><head>     <script src="../angular.min.js"></script>     <script type="text/javascript">         function ContactController($scope) {             $scope.contacts = ["[email protected]", "[email protected]"];             $scope.add = function() {                 $scope.contacts.push($scope.newcontact);                 $scope.newcontact = "";                              };         }         </script>    </head><body>         <h1>  modules sample </h1>     <div ng-controller="ContactController">         Email:<input type="text" ng-model="newcontact">         <button ng-click="add()">Add</button>         <h2> Contacts </h2>         <ul>             <li ng-repeat="contact in contacts"> {{contact}} </li>         </ul>         </div></body> </html>
查看完整描述

3 回答

?
慕的地6264312

TA貢獻1817條經驗 獲得超6個贊

對于角1.3+,您不能再在全局范圍上使用全局控制器聲明(無需顯式注冊)。您需要使用module.controller語法。

例子:-

angular.module('app', [])
    .controller('ContactController', ['$scope', function ContactController($scope) {
        $scope.contacts = ["[email protected]", "[email protected]"];

        $scope.add = function() {
            $scope.contacts.push($scope.newcontact);
            $scope.newcontact = "";

        };
    }]);

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);

這是一個巨大的變化,但它可以關閉以使用全局allowGlobals.

例子:-

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

以下是角源的評論:-

  • 檢查具有給定名稱的控制器是否通過

    $controllerProvider

  • 檢查當前作用域上的字符串是否返回構造函數
  • 如果$控制員提供#lowGlobals,請檢查

    window[constructor]

    在全球

    window

    對象(不推薦)
 .....expression = controllers.hasOwnProperty(constructor)
            ? controllers[constructor]
            : getter(locals.$scope, constructor, true) ||
                (globals ? getter($window, constructor, true) : undefined);

額外檢查:-

  • 請務必將名稱放入ng-app關于角根元素的指令(例如:-html)也是。示例:-ng-app=“myApp”

  • 如果一切都很好,而且您仍然會遇到問題,請記住要確保腳本中包含了正確的文件。

  • 您沒有在不同的地方兩次定義相同的模塊,這會導致先前在同一模塊上定義的任何實體都將被清除,例如angular.module('app',[]).controller(..再一次在另一個地方angular.module('app',[]).service(..(當然,這兩個腳本都包括在內)可以導致模塊上先前注冊的控制器。app第二次重新設計模塊將被清除。


查看完整回答
反對 回復 2019-06-13
?
幕布斯6054654

TA貢獻1876條經驗 獲得超7個贊

我遇到這個問題是因為我在閉包中包裝了一個控制器定義文件:

(function() {
   ...stuff...});

但我忘了實際調用閉包來執行定義代碼,并告訴Javascript我的控制器存在。即,上述需要:

(function() {
   ...stuff...})();

注意結尾處的()。


查看完整回答
反對 回復 2019-06-13
?
慕運維8079593

TA貢獻1876條經驗 獲得超5個贊

我是一個角度初學者,我做了一個基本的錯誤,沒有將應用程序名包含在角根元素中。因此,將代碼更改為

<html data-ng-app>

<html data-ng-app="myApp">

為我工作過。@PSL,已經在他上面的回答中提到了這一點。


查看完整回答
反對 回復 2019-06-13
  • 3 回答
  • 0 關注
  • 852 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號