为什么它适用于$ scope而不是`this`?

时间:2016-12-22 18:38:05

标签: javascript html angularjs scope angularjs-scope

我想知道为什么以下只适用于脚本1和3,而不适用于2.我想使用它,因为在我的项目中我不能使用$ scope。

谢谢!

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular.min.js"></script>
<!DOCTYPE html> <!--   -->
<html ng-app="app">
   <head>
      <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular.min.js"></script>
      <meta charset="utf-8">
      <title>Modelo</title>
   </head>

   <body>
      <div ng-controller="AppCtrl">
         Nombre: {{ name}}
         <script type="text/javascript">
         var app=angular.module("app",[]);
         function AppCtrl($scope) {
            $scope.name= "Bob";
         }
         </script>
      </div>
<br/>
      <div ng-controller="MyCtrl">
         Nombre: {{ name }}
         <script type="text/javascript">
         var app= angular.module("app",[]);
            var MyCtrl = function() {
               this.name = 'Nico';
            }
            app.controller('MyCtrl',MyCtrl);
         </script>
      </div>
<br/>
   <div ng-controller="Algo as and">
      Nombre: {{and.name}}
      <script type="text/javascript">
         //angular.controller('Algo',Algo);
         function Algo() {
            var vm = this;
            vm.name = "Nicolas";
         }
      </script>
   </div>

   </body>   
</html>

如果难以理解,请告诉我。

原谅我的英语。

2 个答案:

答案 0 :(得分:0)

ng-controller使用控制器的构造函数。在第一和第三种情况下,我们有控制器的构造函数。但在第二种情况下,它只是一个变量。所以,它不会起作用。

ng-controller="myCtrl"当你定义这样的东西时,angular会尝试找到myctrl的构造函数。如果,function myCtrl(){}在那里,它可以正常工作。这就是第一和第三种情况。

当有事件观察者时,额外使用$scope而不是this。但我们可以避免它们。了解更多信息https://johnpapa.net/do-you-like-your-angular-controllers-with-or-without-sugar/您可以了解使用哪一个。

答案 1 :(得分:0)

要通过this访问$scope,您必须使用controller as syntax,这是您的第三个示例。但是用法可能略有不同,请参阅上面的doc链接,例如代码。

This post在实际开发中谈到控制器的优点作为语法,你可能想看看。