【问题标题】:Cannot write a basic controller AngularJS无法编写基本控制器AngularJS
【发布时间】:2016-02-25 11:10:41
【问题描述】:

如果我的问题太基本,请原谅我。我正在学习 AngularJS 的控制器。

这是项目结构。

这是我的html:

<!doctype html>
<html ng-app>

<head>
    <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.3/angular.min.js"></script>
    <script src="js/controllers.js" />
</head>

<body>

<div ng-controller="numberController">
<input type = "text" ng-model = "number.number1" placeholder = "Enter a number here">

<input type = "text" ng-model = "number.number2" placeholder = "Enter another number here">
{{number.number1}} + {{number.number2}} = {{number.sumIt()}}

</div>
</body>
</html>

这是我的控制器:

function numberController($scope) {
    $scope.number = {
        number1: 0,
        number2: 0,

        sumIt: function() {
            var numberObject;
            numberObject = $scope.number;
            return parseInt(numberObject.number1) + parseInt(numberObject.number2);
        }
    };
}

网页甚至没有加载。

我哪里出错了?

编辑:

我得到的错误:我得到这个错误:https://docs.angularjs.org/error/$injector/modulerr?p0=sa-app&p1=Error:%20%5B$injector:nomod%5D%20http:%2F%2Ferrors.angularjs。 org%2F1.3.3%2F$injector%2Fnomod%3Fp0%3Dsa-app%0A%20%20%20%20at%20Error%20(本机)%0A%20%20%20%20at%20https:%2F% 2Fajax.googleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.3.3%2Fangular.min.js:6:416%0A%20%20%20%20at%20https:%2F%2Fajax.googleapis.com%2Fajax%2Flibs %2Fangularjs%2F1.3.3%2Fangular.min.js:21:366%0A%20%20%20%20at%20a%20(https:%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fangularjs%2F1. 3.3%2Fangular.min.js:21:7)%0A%20%20%20%20at%20https:%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.3.3%2Fangular.min.js: 21:250%0A%20%20%20%20at%20https:%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.3.3%2Fangular.min.js:35:105%0A%20%20 %20%20at%20r%20(https:%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.3.3%2Fangular.min.js:7:302)%0A%20%20%20%20at %20g%20(https:%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.3.3%2Fangular.min.js:34 :456)%0A%20%20%20%20at%20Lb%20(https:%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.3.3%2Fangular.min.js:38:184)% 0A%20%20%20%20at%20d%20(https:%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.3.3%2Fangular.min.js:17:381

我更新的控制器:

var saApp = angular.module("saApp", []);

saApp.controller('numberController', function($scope) {
    $scope.number = {
        number1: 0,
        number2: 0,
        sumIt: function() {
            var numberObject;
            numberObject = $scope.number;
            return parseInt(numberObject.number1) +      parseInt(numberObject.number2);
        }
    };
});

我更新的 HTML:

<!doctype html>
<html>

<head>
    <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.3/angular.min.js"></script>
    <script src="js/controllers.js" />
</head>

<body>

<div ng-app = "saApp" ng-controller="numberController">
<input type = "text" ng-model = "number.number1" placeholder = "Enter a number here">

<input type = "text" ng-model = "number.number2" placeholder = "Enter another number here">
{{number.number1}} + {{number.number2}} = {{number.sumIt()}}

</div>
</body>
</html>

【问题讨论】:

  • 你的控制台有什么?
  • 你需要 ng-app...控制器必须是 ng-app 的一部分
  • 没有控制台。我只有一个网络浏览器。
  • 您的网络浏览器有一个控制台...
  • 我已经从控制台添加了错误。

标签: javascript angularjs angularjs-controller


【解决方案1】:

您需要先将您的应用程序与您的 JS 文件链接起来。 将您的标签更改为 并更改您的 controllers.js

<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
    $scope.number = {
        number1: 0,
        number2: 0,
        sumIt: function() {
            var numberObject;
            numberObject = $scope.number;
            return parseInt(numberObject.number1) +      parseInt(numberObject.number2);
        }
    };
});
</script>

如果您右键单击鼠标然后单击 Inspect 元素,也会找到控制台。

【讨论】:

  • 我已经更新了。 (请参阅我更新的问题。)但它仍然不起作用。
  • 尝试清除缓存或在隐身模式下运行它。如果它仍然不起作用,可能需要一个服务器尝试使用 XAMP/WAMP 等运行它
【解决方案2】:

嗨,这样写你的程序:-

<!doctype html>
<html>

<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.5/angular.min.js"></script>
<script>
 angular.module("myapp", [])
    .controller("NumberController", function($scope, $http) {
       $scope.number = {
        number1: 0,
        number2: 0,
        sum:0,
        sumIt: function() {
            var numberObject;
            numberObject = $scope.number;
            this.sum = parseInt(numberObject.number1) + parseInt(numberObject.number2);
        }
    };
    } );
</script>
</head>
<body ng-app="myapp"> 
<div ng-controller="NumberController">
<input type = "text" ng-model = "number.number1" placeholder = "Enter a number here"/>

<input type = "text" ng-model = "number.number2" placeholder = "Enter another number here"/>
<input type = "button" ng-click="number.sumIt()" value="Sum"/>
sum is {{number.sum}}

</div>
</body>
</html>

【讨论】:

    【解决方案3】:

    问题:您正在使用不推荐使用的控制器声明方法。至少从 1.3 版开始,您不能使用 function &lt;controller&gt; 声明控制器。

    解决办法:

    1:声明应用程序 - var app = angular.module('myApp', []);

    2:附加控制器

    app.controller('numberController', ['$scope', function($scope) {
    
    $scope.number = {
            number1: 0,
            number2: 0,
    
            sumIt: function() {
                var numberObject;
                numberObject = $scope.number;
                return parseInt(numberObject.number1) + parseInt(numberObject.number2);
            }
        };
    }]);
    

    我做了一个jsfiddle to demonstrate.

    【讨论】:

      【解决方案4】:

      你必须定义 angular.module

      <html ng-app="myApp">
      

      然后像下面这样编写你的控制器

      var myApp = angular.module('myApp',[]);
      
      myApp.controller('numberController', ['$scope', function($scope) {
         //Your controller code here
      }]);
      

      您可以检查工作代码笔Here

      这里有用的链接
      1 . Angular docs
      2 . TutorialsPoint angular js

      【讨论】:

      • 你也可以查看链接
      • 如果我将脚本移动到 html 文件中的脚本标签,我可以让它工作。我不知道为什么会这样。
      【解决方案5】:

      用你的代码不清楚你定义的app模块。来自角度文档

      // app.js
          (function(angular) {
              angular.module('ngAppDemo', []).controller('NumberController', function($scope){
                  $scope.number = {
                      number1: 0,
                      number2: 0,
      
                      sumIt: function() {
                          var numberObject;
                          numberObject = $scope.number;
                          return parseInt(numberObject.number1) + parseInt(numberObject.number2);
                      }
                  };
              });
          })(window.angular);
      

      请注意,您没有使用角度控制器的命名约定,控制器名称以大写字母开头,而 js 函数以小写字母开头(函数 numberController() - ng-controller="NumberController")

      最后在html或body上插入ng-app,在div上插入controller

      <body ng-app="ngAppDemo">
          <div ng-controller="numberController">
      

      【讨论】:

        【解决方案6】:

        var myApp = angular.module('myApp',[]);
        
        myApp.controller('numberqcontroller',  function($scope) {
           //$scope.number ={};
          $scope.number = {
                number1: 10,
                number2: 0,
        
                sumIt: function() {
                    var numberObject;
                    numberObject = $scope.number;
                    return parseInt(numberObject.number1) + parseInt(numberObject.number2);
                }
            };
          
        });
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
        <!doctype html>
        <html >
        
        <head>
           
        </head>
        
        <body ng-app="myApp">
        
        <div ng-controller="numberqcontroller">
        <input type = "text" ng-model = "number.number1" placeholder = "Enter a number here">
        
        <input type = "text" ng-model = "number.number2" placeholder = "Enter another number here">
        {{number.number1}} + {{number.number2}} = {{number.sumIt()}}
        
        
        </div>
        </body>
        </html>

        【讨论】:

          【解决方案7】:

          我修改了您的代码,它使用相同的目录结构。这是js文件:

          var app = angular.module('myApp', []);
          app.controller('numberController', function($scope) {
          
                  $scope.number = {
                  number1: 0,
                  number2: 0,
          
                  sumIt: function() {
                      var numberObject;
                      numberObject = $scope.number;
                      return parseInt(numberObject.number1) + parseInt(numberObject.number2);
                  }
              }; 
          
          });
          

          和html:

          <!DOCTYPE html>
          <html ng-app="myApp">
          
             <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
             <script src="js/controllers.js" > </script>
          
          <body>
              <div ng-controller="numberController">
          
                 <input type = "text" ng-model = "number.number1" placeholder = "Enter a number here">
          
                 <input type = "text" ng-model = "number.number2" placeholder = "Enter another number here">
          
                  {{number.number1}} + {{number.number2}} = {{number.sumIt()}}
          
              </div>
          
          </body>
          </html>
          

          【讨论】:

            【解决方案8】:

            这个怎么样:

            <!DOCTYPE html>
            <html ng-app="myApp">
            <head>
            <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
              <meta charset="utf-8">
              <meta name="viewport" content="width=device-width">
              <title>JS Bin</title>
            </head>
            <body>
            
              <div ng-controller="numberController as ctrl">
                <input type="number" ng-model="ctrl.number1" placeholder="Enter a number here">
                <br>
                <input type="number" ng-model="ctrl.number2" placeholder = "Enter another number here">
                <br>
                <div ng-if="ctrl.number1 && ctrl.number2">
                  {{ctrl.number1}} + {{ctrl.number2}} = {{ctrl.sum(ctrl.number1, ctrl.number2)}}
                </div>
              </div>
            
            </body>
            </html>
            

            使用 Javascript:

            var myApp = angular.module('myApp',[]);
            
            myApp.controller('numberController', function() {
              var vm = this;
              vm.number1 = null;
              vm.number2 = null;
              vm.sum = function(num1, num2) {
                return num1 + num2;
              };
            });
            

            JS Bin example

            建议使用“controller as”结构。您还应该考虑使用指令(或组件,如果您可以升级到 AngularJs 1.5)而不是使用 ng-controller。

            【讨论】:

              【解决方案9】:

              只需在您的控制器中执行此操作

              var app = angular.module('myapp', []);
              
              app.controller('numberController', function($scope) {
                  $scope.number = {
                      number1 : 0,
                      number2 : 0,
                      sumIt : function() {
                          //no need to copy $scope.number to another variable just simply use like this
                          return parseInt($scope.number.number1) + parseInt($scope.number.number2);
                      }
                  }
              });
              

              这里是html代码

              <body  ng-app="myapp">
                  <div ng-controller="numberController">
                  <input type = "text" ng-model = "number.number1" placeholder = "Enter a number here"/>
                  <br /><br />
                  <input type = "text" ng-model = "number.number2" placeholder = "Enter another number here"/>
                  <br /><br />
                   <!-  {{number.number1}} + {{number.number2}} = {{number.sumIt()}}  no need to do this just simply call the sumIt function like below->
                   Total = {{number.sumIt()}}
                  </div>
              </body>
              

              最后的输出

              Output

              【讨论】:

                猜你喜欢
                • 2015-06-18
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多