如何使用 angular-fullstack 生成器语法使用 $scope 和 $watch?

Posted

技术标签:

【中文标题】如何使用 angular-fullstack 生成器语法使用 $scope 和 $watch?【英文标题】:How do I work with $scope and $watch with angular-fullstack generator syntax? 【发布时间】:2016-03-30 04:54:00 【问题描述】:

我正在使用angular-fullstack generator 为我的应用程序生成新路由。语法为really unfamiliar 并使用类类结构。我如何使用它来注入 $scope 和 $watch 之类的东西?我想做的主要事情是观察特定变量的变化。语法如下。有人知道如何处理这个吗?

'use strict';

(function() 

class MainController 

  constructor($http) 
    this.$http = $http;
    this.awesomeThings = [];

    $http.get('/api/things').then(response => 
      this.awesomeThings = response.data;
    );
  

  addThing() 
    if (this.newThing) 
      this.$http.post('/api/things',  name: this.newThing );
      this.newThing = '';
    
  

  deleteThing(thing) 
    this.$http.delete('/api/things/' + thing._id);
  


angular.module('myapp')
  .controller('MainController', MainController);

)();

如何注入 $watch 以便可以执行以下操作:

this.$watch('awasomeThings', function ()  ... );

【问题讨论】:

【参考方案1】:

他们打算(我的假设)让您使用 Angular 的 controllerAs 语法。当你这样做时,你最终使用 $scope 的次数会少很多(如果有的话)。

原因是您的视图不再直接绑定到范围,它们绑定到控制器的属性。因此,在上面的 MyController 示例中,视图可以使用您提供的控制器名称访问 awesomeThings 的数组:

<body ng-controller="MyController as myCtl">
  <p ng-repeat="thing in myCtl.awesomeThings">thing</p>
</body>

您仍然需要使用$scope 的一种情况是您想使用$scope.$watch()。在这种情况下,将$scope 注入您的控制器,就像上面的$http 一样:

class MyController 

  constructor($scope) 
    // use the $scope.$watch here or keep a reference to it so you can
    // call $scope.$watch from a method
    this.$scope = $scope; 
  


PS:这个语法很可能是 ES6,但我可能是错的......我使用的 Typescript 看起来非常相似。

【讨论】:

完美,谢谢。现在更有意义了。我认为他们确实在使用 ES6 和 Babel 将其编译为常规 javacript。 如果您使用的是 ES6,那么您也可以通过在类定义下方和构造函数之前插入 static $inject = ['$scope']; 来声明您的 DI(为了安全缩小)。如果您的 ES6 转译器支持该静态定义。

以上是关于如何使用 angular-fullstack 生成器语法使用 $scope 和 $watch?的主要内容,如果未能解决你的问题,请参考以下文章

升级到 Mongoose 5.0.13 - 从蓝鸟错误中获得 500 的 angular-fullstack 生成的应用程序:错误:期待一个数组,一个承诺

在 angular-fullstack 中服务器重新启动后,Mongoose populate() 为空

如何部署 yeoman angular-fullstack 项目?

Angular-fullstack 获取当前用户 ID

在 angular-fullstack 应用程序中更新后单个帖子不同步

将数据从 server/app.js 传递到控制器 Angular-fullstack + multer