【问题标题】:Why does it work with $scope but not with `this`?为什么它适用于 $scope 但不适用于 `this`?
【发布时间】:2017-05-08 11:14:21
【问题描述】:

我想知道为什么以下仅适用于脚本 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>

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

请原谅我的英语。

【问题讨论】:

  • 它也适用,只需将控制器定义为“脚本 3”为“MyCtrl as ctrl”
  • "script 3" 之所以有效,是因为您在这里使用的是旧版 Angular 版本 1.2.19。 this 的使用在 Angular 1.3 中进行了改进,因此在当前的 Angular 迭代中,#3 也不起作用。
  • 谢谢!就是这么愚蠢的事情。

标签: javascript html angularjs scope angularjs-scope


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    This post讲控制器作为语法在实际开发中的优势,大家不妨看看。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-18
      • 1970-01-01
      • 2022-07-30
      • 1970-01-01
      相关资源
      最近更新 更多