首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检测AngularJS表中值的变化?

如何检测AngularJS表中值的变化?
EN

Stack Overflow用户
提问于 2015-09-30 12:22:31
回答 4查看 1.9K关注 0票数 0

我正在使用标准的ng-重复显示一些信息。

标记的开头如下:

代码语言:javascript
运行
复制
<tr ng-repeat="p in currentpicks |filter:searchQuery | orderBy:['mcu','psn','litm']" bs-pop>
                                <td>{{$index+1}}</td>
                                <td>{{p.mcu}}</td>
                                <td>
                                    {{p.psn}}

每当p.psn更改行样式时,我都需要:

附加信息:我需要的是每次创建表以“捕获”不断变化的p.psn并添加样式来定义更改。我只拥有来自$http的数据,当一个文件更改值时,我需要区分表行。

我该怎么做呢?

EN

回答 4

Stack Overflow用户

发布于 2015-09-30 13:25:54

代码语言:javascript
运行
复制
<tr ng-repeat="p in currentpicks ...." ng-class="{'special': isSpecial(p)}" ....

css

代码语言:javascript
运行
复制
.special {
  background-color: red;
}

脚本

代码语言:javascript
运行
复制
$scope.isSpecial = function(pick) {
      return pick.psn > 1000; //whatever condition
};
票数 1
EN

Stack Overflow用户

发布于 2015-09-30 13:11:25

除非您想编写一个指令,然后可以将其附加到代码中的html标记,否则我建议在相关控制器中添加一个$watchColletion

在angularJs网站上有一个很好的例子:https://docs.angularjs.org/api/ng/type/$rootScope.Scope

考虑到angularJs是双向绑定的,您对currentpicks集合所做的更改应该自动反映在您的视图中。如果他们没有,你可以随时打电话给$scope.$apply();

如果要在值更改时执行方法,则始终可以实现如下内容:

代码语言:javascript
运行
复制
function myCtrl($scope) {

    $scope.clicks = [];
    $scope.names = ['igor', 'matias', 'misko', 'james'];
    $scope.dataCount = 4;

    $scope.blank = "Hello World";

    $scope.$watchCollection('names', function(newNames, oldNames) {
        if (newNames !== oldNames) {
            $scope.clicks.push(oldNames);
            $scope.dataCount = newNames.length;    
        }
    });

    $scope.doSomething = function(){
        $scope.names.pop();
        $scope.$digest();
    }
}

这样,您就可以在进程的中间执行任何您想要的自定义代码。

Fiddler在这里:https://jsfiddle.net/20p96wv7/

票数 0
EN

Stack Overflow用户

发布于 2015-09-30 13:46:27

代码语言:javascript
运行
复制
<tr ng-class="{'myCssClass': addAwesomeStyle(p.psn, $index)}" ng-repeat="p in currentpicks |filter:searchQuery | orderBy:['mcu','psn','litm']" bs-pop>
                                <td>{{$index+1}}</td>
                                <td>{{p.mcu}}</td>
                                <td>
                                    {{p.psn}}

在你的控制器里:

代码语言:javascript
运行
复制
$scope.addAwesomeStyle = function(psn, index){
    var prev = $scope.data[index - 1];

    // compare stuff...
    return true;
}

这应该能帮你解决问题!事实上,我可能不会这样做,似乎有点倒退。我会试着在前面应用造型规则。这是除非你要改变事情的进展!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32865980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档