angular-meteor:你如何看待`helpers`方法的收藏?

时间:2016-03-08 12:08:22

标签: angular-meteor

我在ng-repeat函数设置的上下文变量的指令中使用helper,但该指令不呈现整个集合。就像我所知,它正在呈现指令postLink时发现的任何东西,但是当集合增长时不会重新渲染。

我尝试在指令中添加$watch,但它只在加载时触发一次,即使集合增长也是如此。

以下是我从meteor-angular-socially教程创建的示例,请参阅:https://github.com/Urigo/meteor-angular-socially/tree/step_14

档案:client/parties/parties-list/parties-list.component.js

angular.module('socially').directive('partiesList', function () {
  return {
    restrict: 'E',
    templateUrl: 'client/parties/parties-list/parties-list.html',
    controllerAs: 'partiesList',
    controller: function ($scope, $reactive) {
      $reactive(this).attach($scope);

      window.vm = vm = this;
      $scope.$watch(vm.parties, function(newV, oldV) {
        // this $watch fires once when the controller is loaded, but never again
        // but vm.parties is updated when new parties are added
        return console.warn('vm.parties.count=' + (newV != null ? newV.length : void 0));
      });

      ...

      this.helpers({
        parties: () => {
          return Parties.find({}, { sort : this.getReactively('sort') });
        },
        users: () => {
          return Meteor.users.find({});
        },
        partiesCount: () => {
          return Counts.get('numberOfParties');
        }
      });

更新集合时,$scope.$watch不会触发。我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

DOOH!答案是使用scope.$watchCollection代替scope.$watch

答案 1 :(得分:0)

在某些情况下,@ michael scope.$watchCollection可能会有效,但如果您想要监视所有数据更改,则需要使用深度监视:$ scope。$ watch(func, true

$scope.$watch(vm.parties, function(newV, oldV) {
    return console.warn('vm.parties.count=' + (newV != null ? newV.length : void 0));
}, true);

如果您将第二个参数设置为true,getReactively也可以使用深度监视:$scope.getReactively('var', true)