【问题标题】:Angularjs: how change icon when item is clickedAngularjs:单击项目时如何更改图标
【发布时间】:2016-03-22 20:49:25
【问题描述】:

我知道这个问题已经有了一些答案/解决方案,但没有一个对我有用,很可能是因为这是我第一次尝试使用 Angularjs 实现某些东西。

我有一个div(标题),当它被点击时会展开一些信息,我想在该信息可见时更改其中的图标...

这是我的代码:

<div class="title" ng-click="view_variables(request)">
    <i class="glyphicon glyphicon-chevron-right"></i>
</div>

这是我尝试做的,但没有工作,因为 div 将不再显示扩展信息:

<div class="title" ng-click="view_variables(request) = !view_variables(request)">
    <i ng-class="{'glyphicon glyphicon-chevron-right':!view_variables(request), 'glyphicon glyphicon-chevron-left': view_variables(request)}"></i>
</div>

控制器代码:

$scope.view_variables = function(req){
    if (!req.enabled_variables && !req.disabled_variables) {
        $http.get('/api/files/' + $scope.file_id + '/requests/' + req.id + '/variables')
        .success(function(data){
            variables = data.data;
            req.enabled_variables = [];
            req.disabled_variables = [];
            for (i=0; i<variables.length; i++) {
                if (variables[i].disabled == true) {
                    req.disabled_variables.push(variables[i]);
                } else {
                    req.enabled_variables.push(variables[i])
                }
            }
        });
    }

    req.show_variables = !req.show_variables;
}

【问题讨论】:

  • 你能不能只显示控制器的代码

标签: angularjs


【解决方案1】:

view_variables 函数不返回任何内容,因此它始终被视为false

你想要这样的东西:

<div class="title" ng-click="view_variables(request)">
    <i ng-class="{'glyphicon glyphicon-chevron-right':!request.show_variables, 'glyphicon glyphicon-chevron-left': request.show_variables}"></i>
</div>

【讨论】:

  • 谢谢!这比预期的要容易:)
【解决方案2】:

我认为问题出在 ng-click 属性中。通过使用“view_variables(request) = !view_variables(request)”,您不是两次调用 view_variables 函数吗?此外,为函数调用赋值似乎很奇怪。

我会保持 ng-click="view_variables(request)" 就像您在第一行代码中所做的那样,然后让 view_variables 函数在范围 ($scope.data.view_vars) 的某处设置一个布尔值并确定ng-class 为你的 i 元素。

祝你好运!

--编辑:现在你已经安装了你的控制器,req.show_variables 看起来是一个有用的候选者

【讨论】:

    【解决方案3】:

    在 ng-class 中调用函数是个坏主意。你为什么不为它使用一个标志。

    例如。 内部控制器-

    $scope.view_variables = function(request){
      //your code
    
      $scope.isExpanded = !$scope.isExpanded;
    };
    

    在html中

    <div class="title" ng-click="view_variables(request)">
        <i class="glyphicon" ng-class="{'glyphicon-chevron-right':!isExpanded, 'glyphicon-chevron-left':isExpanded}"></i>
    </div>
    

    【讨论】:

      【解决方案4】:

      使用ng-show directive 可能会更好:

      <div class="title" ng-click="view_variables(request)">
           <i class="glyphicon glyphicon-chevron-right" ng-show="!view_variables(request)"></i>
           <i class="glyphicon glyphicon-chevron-left" ng-show="view_variables(request)"></i>
      </div>
      

      你可以像这样使用ng-if directive

      <div class="title" ng-click="view_variables(request)">
           <i class="glyphicon glyphicon-chevron-right" ng-if="!view_variables(request)"></i>
           <i class="glyphicon glyphicon-chevron-left" ng-if="view_variables(request)"></i>
      </div>
      

      假设view_variables(request) 返回真或假...也许可以将其替换为req.show_variables

      【讨论】:

      • view_variables 函数确实有效(切换request.show_variables 并有条件地执行$http 请求),因此您不想在ng-if 中调用它。 ng-if 的条件将针对每个摘要循环进行评估,因此结果将是不确定的。
      • @Jack A. 这是真的……那么 ng-show 应该更合适?
      • 任何你绑定到在每个摘要周期中被评估的东西(比如ng-ifng-show)都需要有一个一致的值。为了性能,最好绑定到变量而不是函数。函数调用最好留给ng-click 之类的事件处理程序,因为它们仅在事件触发时才被调用,而不是在每个摘要循环中调用。
      • 我现在明白了,这就是为什么我建议使用req.show_variables,但我不知道他的逻辑......是的,你是对的,它会更有意义。
      猜你喜欢
      • 2022-06-22
      • 2021-12-12
      • 2014-11-16
      • 1970-01-01
      • 2018-06-01
      • 1970-01-01
      • 2015-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多