AngularJS指令-ng中的ng-重复-切换样式应该是$ watcher吗?

温泉

我目前正在实施一个尖峰,以进一步了解角度指令等。

前提是在许多货币对上创建FX监视列表。

我的数据Feed是通过socket.io为我的价格更新设置的。

我拥有的绊脚石能够根据价格变化更改css,即,向上箭头表示向上,向下箭头表示向下。

我觉得我需要一个观察器功能,但是在哪里着手却很挣扎,所以一直在ng-class中寻找某种表达方式来完成工作……但是该方法不仅开始看起来像一个$ watcher,而且还是有缺陷的因为将先前的价格保存在我的指令范围内,意味着永远只有一个旧值,而每个价格都没有。

我的问题是:是使用ng-class的解决方案还是设置$ watcher函数?

这是我的代码...

HTML模板

<div ng-repeat="rate in rates" ng-click="symbolSelected(rate)">
        <div class="col-1-4">
            {{rate.symbol}}
        </div>
        <div class="col-1-4">
            <span ng-class='bullBear(rate.bidPoint)' ></span> {{rate.bidBig}}<span class="point">{{rate.bidPoint}}</span>
        </div>

        <div class="col-1-4">
            <span ng-class='bullBear(rate.offerPoint)' ></span> {{rate.offerBig}}<span class="point">{{rate.offerPoint}}</span>
        </div>

        <div class="col-1-4">
            {{rate.timeStamp | date : 'hh:mm:ss'}}
        </div>

    </div>

我的指令当前看起来像这样...如前所述,这将无法正常工作,并且bullBear方法开始看起来像是$ watcher函数。

.directive('fxmarketWatch', function(fxMarketWatchPriceService){

        return {

            restrict:'E',
            replace:'true',
            scope: { },

            templateUrl:'common/directives/fxMarketWatch/marketwatch.tpl.html',

            controller : function($scope, SYMBOL_SELECTED_EVT,fxMarketWatchPriceService){

                $scope.symbolSelected = function(currency){
                    $scope.$emit(SYMBOL_SELECTED_EVT,currency);
                }

                $scope.bullBear = function(newPrice){


                    if ($scope.oldPrice> newPrice ){

                           return ['glyphicon glyphicon-arrow-down','priceDown'];
                     }
                     else if ($scope.oldPrice > newPrice ){

                           return ['glyphicon glyphicon-arrow-up','priceUp'];
                     }

                }


                $scope.$on('socket:fxPriceUpdate', function(event, data) {

                    $scope.rates  =  data.payload;

                });
            }

        }

    })
0

我建议您同时使用ng-class$watcher两者实际上可以互相称赞:

更新:为了使代码与一起使用ng-repeat,我们需要将所有CSS类逻辑迁移到另一个controller

app.controller('PriceController', function($scope) {
    // we first start off as neither up or down
    $scope.cssBid = 'glyphicon';
    $scope.cssOffer = 'glyphicon';

    var cssSetter = function(newVal, oldVal, varName) {
        if (angular.isDefined(oldVal) && angular.isDefined(newVal)) {
            if (oldVal > newVal) {
                $scope[varName] = 'glyphicon glyphicon-arrow-down priceDown';
            } else if (newVal > oldVal) {
                $scope[varName] = 'glyphicon glyphicon-arrow-up priceUp';
            } else {
                $scope[varName] = 'glyphicon';
            }
        }
    };

    // watch for change in 'rate.bidPoint'
    $scope.$watch('rate.bidPoint', function(newVal, oldVal) {
        cssSetter(newVal, oldVal, 'cssBid');
    });
    // watch for change in 'rate.offerPoint'
    $scope.$watch('rate.offerPoint', function(newVal, oldVal) {
        cssSetter(newVal, oldVal, 'cssOffer');
    });
});

接下来,将其绑定PriceControllerng-repeatdiv上。通过这样做,角将创建一个controller为每个实例raterates因此,这一次rate.bidPoint并且rate.offerPoint应可用于$watch-ing:

<div ng-repeat="rate in rates" ng-click="symbolSelected(rate)" ng-controller="PriceController">
    <div class="col-1-4">
        <span ng-class='cssBid'></span> {{rate.bidBig}}<span class="point">{{rate.bidPoint}}</span>
    </div>

    <div class="col-1-4">
        <span ng-class='cssOffer'></span> {{rate.offerBig}}<span class="point">{{rate.offerPoint}}</span>
    </div>
</div>

现在,指令的控制器将比以前更短:

controller: function($scope, SYMBOL_SELECTED_EVT, fxMarketWatchPriceService){
    $scope.symbolSelected = function(currency) {
        $scope.$emit(SYMBOL_SELECTED_EVT, currency);
    }

    $scope.$on('socket:fxPriceUpdate', function(event, data) {
        $scope.rates = data.payload;
    });
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

AngularJS指令-ng中的ng-repeat是否应该是切换样式的$ watcher?

来自分类Dev

页面上的每个“组件”都应该是angularJS中的指令吗?

来自分类Dev

AngularJS Ng重复和重复

来自分类Dev

在angularjs中自动重复ng-repeat

来自分类Dev

AngularJS双ng重复

来自分类Dev

NG重复后运行指令

来自分类Dev

AngularJS ng-class在子指令中时切换类

来自分类Dev

指令模板中ng内重复项的隔离范围

来自分类Dev

指令模板中ng内重复项的隔离范围

来自分类Dev

angularJs指令中templateUrl的正确路径应该是什么?

来自分类Dev

AngularJS ng重复多次tr

来自分类Dev

AngularJS ng重复行/ ul

来自分类Dev

你可以重复多种类型的AngularJS指令吗?

来自分类Dev

删除对象中的重复键的AngularJS ng-repeat问题

来自分类Dev

angularjs 中与 ul li 重复的 Ng 不正确

来自分类Dev

AngularJS-强制渲染/重新渲染/编译ng重复的div内部指令

来自分类Dev

如何将ng重复对象传递给AngularJS指令?

来自分类Dev

重复内的AngularJS指令

来自分类Dev

angularjs中的ng-else指令

来自分类Dev

ng-if中的AngularJS指令不会运行

来自分类Dev

ng-bind-html中的AngularJS指令

来自分类Dev

ng-repeat angularjs中的指令范围

来自分类Dev

装饰AngularJs中的ng-click指令

来自分类Dev

ng-repeat中的angularjs指令服务

来自分类Dev

AngularJs中ng-app指令的功能

来自分类Dev

简单的Ng重复(不重复)方案指令TemplateUrl

来自分类Dev

AngularJS-在指令模糊中检查重复的电子邮件

来自分类Dev

无法在 Angularjs 重复指令中显示 WEBAPI 数据

来自分类Dev

在页面或视图之间切换时停用angularjs ng-change指令