Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我的angular应用程序不工作_Javascript_Angularjs - Fatal编程技术网

Javascript 我的angular应用程序不工作

Javascript 我的angular应用程序不工作,javascript,angularjs,Javascript,Angularjs,我有以下代码: <!doctype html> <html ng-app="myApp" xmlns="http://www.w3.org/1999/html"> <head> <meta charset="utf-8"> <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></scr

我有以下代码:

<!doctype html>
<html ng-app="myApp" xmlns="http://www.w3.org/1999/html">
<head>
<meta charset="utf-8">
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script>
</head>
<body>
<script type="text/javascript">
  var app = angular.module("myApp", []);
  app.controller("FirstCtrl",function ($scope) {
    $scope.count = 0;
    $scope.increment = function (){
    $scope.count = $scope.count + 1;
    }
  });

</script >
<div ng-controller="FirstCtrl">
  <button class="btn" ng-model="count"
          ng-click="increment()">
    Click to increment</button>
  {{ count }}
</div>

var-app=angular.module(“myApp”,[]);
app.controller(“FirstCtrl”,函数($scope){
$scope.count=0;
$scope.increment=函数(){
$scope.count=$scope.count+1;
}
});
单击以增加
{{count}}
怎么了?
当我在没有控制器的情况下工作时,它可以正常工作,但当我使用app和app.controller时,它将无法工作。为什么呢?我做错什么了吗?

你在这里混搭风格。在HTML中,使用控制器作为语法,将
FirstCtrl作为app1
编写。这将在作用域上创建一个名为
app1
的对象,它是
FirstCtrl
的实例
app1.count
app1.increment()
等将是
FirstCtrl
对象的属性

在控制器中,您没有在控制器上创建属性。而是将变量指定为
$scope
对象上的属性

使用
$scope
有很多优点,因为它本质上是一个全局对象,所以可以从应用程序中的任何地方访问它。然而,它的缺点也根源于它是一个全局对象

您可以更改javascript以匹配控制器的语法,如图所示:

app.controller("FirstCtrl",function () {
    //create an alias to this for consistent reference
    var app1 = this;
    app1.count = 0;
    app1.increment = function (){
        app1.count += 1;
    };
});
或者,您可以将HTML更改为使用
$scope

<div ng-controller="FirstCtrl">
  <button class="btn" ng-model="count"
          ng-click="increment()">
    Click to increment</button>
  {{ count }}
</div>
注意,您不必在HTML中引用
$scope
,因为它的存在是隐式的。但是,javascript中的这一行
$scope.count=this.count+1;
在这两种情况下都不起作用,因为您正在混合样式

此外,如前所述,控制器as语法要求Angular 1.1.5或更高版本。

仅在版本1.1.5中提供“控制器as”语法+

据我所知,当使用“Controller as”时,您希望引用具有指定控制器别名的变量(在您的示例中为“app1”),那么您应该在控制器中使用“this.”语法分配变量,或者访问没有“app1”的变量,然后它将尝试从范围中获取它


好的,那么你的应用程序在做了我在回答中建议的更改后仍然无法工作?如果您在得到一些答案后更改损坏的代码,则无法获得对您和其他人有帮助的准确答案…是的,谢谢,问题是我使用的angular版本,非常感谢您的大力帮助
$scope.count += 1;
var app = angular.module("myApp", []);

app.controller("FirstCtrl",function ($scope) {

  this.count = 0;
  this.increment = function (){
    this.count = this.count + 1;
  };

  $scope.count = 0;
  $scope.increment = function(){
    $scope.count = $scope.count + 1;
  };

});