AngularJS Scope.on和scope.emit在过滤器中调用顺序

时间:2015-02-18 11:38:45

标签: javascript angularjs

在我的一个过滤器中,会监视另一个控制器中更改的值。根据更新的值,我想决定是否应该调用emit。它如下。

scope.$on('XChanged', function(event, x) {
              console.error( '==order list has changed : ' + x  );
              console.warn('INSIDE FILTER ON '+event);

             scope.bx = true; // bx variable is initialized in the controller where the filter is called and default is false.
            });
          console.warn('AFTER FILTER ON 1 >>'+ scope.bx);

           if( !scope.bx  ){
             scope.$emit('handleEmit', {msg: 'RECYCLE' });
             console.error( scope.bx+ ' Recycle requested. ');
           }

但问题是,scope.on首先执行,并且在过滤器中从上到下执行并不会发生。另外,即使在scope.on中将bx设置为true,if( !scope.bx )也会变为true,这意味着指定的bx的真值不是正确的...可能我错了...你能不能让我知道怎么能想出这个。我想要做的是,根据scope.on中更改的值,应该执行emit。 (换句话说,在scope.on中更改了bx布尔值,并且bx的更新值应该能够决定是否应该执行emit。)

1 个答案:

答案 0 :(得分:1)

我认为你需要使用$ watch。

    scope.$on('XChanged', function(event, x) {
         console.error( '==order list has changed : ' + x  );
         console.warn('INSIDE FILTER ON '+event);

         scope.bx = true; // bx variable is initialized in the controller where the filter is called and default is false.
        });
         console.warn('AFTER FILTER ON 1 >>'+ scope.bx);

    scope.$watch('bx', function(newVal, oldVal){
        if (newVal == oldVal)
            return; //shit happens ;-)

         if( !scope.bx  ){
           scope.$emit('handleEmit', {msg: 'RECYCLE' });
           console.error( scope.bx+ ' Recycle requested. ');
         }

    });