如何判断angularjs下拉菜单?

时间:2014-04-28 18:43:21

标签: javascript jquery html angularjs

我有一个按钮,显示点击下拉列表。下拉列表中的每个元素在单击时都会生成一个ui对话框。打开ui时,将检查下拉列表中的相应项目。再次单击下拉列表中的元素将关闭对话框,并在列表中取消选中该对话框。

也可以使用对话框上的“X”按钮关闭对话框。我需要这个结束操作也取消选中下拉列表中的相应元素。这就是我在控制器里面的东西:

<div class="dropdown">
    <button type="button" class="btn btn-default dropdown-toggle" style="width:100px">
      <img src="/UIDemo/images/maps-icon.png" style="padding-right:3px" />
       Data Grid 
      <span class="caret"></span>
    </button>
    <ul class="dropdown-menu" role="menu">
        <li><a href="#" ng-click="showRouteFeature = !showRouteFeature; 
            openCloseGrid('routeFeature', showRouteFeature);">
          <span ng-class=
            "{'glyphicon glyphicon-ok icon-ok check-mark': showRouteFeature, 
              'glyphicon no-icon': !showRouteFeature}">
          </span>
          <span class="text">Route Feature</span></a></li>
    </ul>
</div>

在我的.js文件中,我有一个关闭事件:

$(document).on('click', '.ui-dialog-titlebar-close', function () {
    $scope.showRouteFeature = false;
    $scope.apply();
 });

格式化有点粗略,但我尽我所能。当我单击下拉列表中的一个选项时,它会设置一个切换(通过ng-click“在showRouteFeature上建立从true到false,反之亦然。当我单击对话框上的'X'时,它会设置{{1应该取消选中下拉列表中的元素。我可以在控制台中看到,当我点击'X'时,$scope.showRouteFeature实际上设置为false。

我在这个问题上找到了这个问题,How can I tell AngularJS to "refresh"和这篇帖子http://jimhoskins.com/2012/12/17/angularjs-and-apply.html,这就是我将变量设置为false后$scope.showRouteFeature的原因。但是,它只是没有刷新我的下拉列表。任何见解都将不胜感激。

1 个答案:

答案 0 :(得分:0)

这可能不是你的问题,但我怀疑它可能,所以这里有:

警告,当您在示例中直接使用原语时,您最好知道自己在做什么。一般来说应该避免。原因是如果创建子范围,原型继承将使子范围上的属性不会反映在父范围上。许多内置的Angular指令创建子范围(ng-repeat,ng-if,ng-switch)。你没有在你的代码中显示ng-repeat,但是如果它应该在解释时工作,我怀疑你在实际的代码中有它。所以将属性放入对象中。

确定这是否是您的问题的一种很好的方法,将{{showRouteFeature}}置于HTML的最顶层,然后将其放在DOM的更深层次。如果它们的值开始不同,则会出现范围继承问题。

有关详情,请参阅此处的第一点: http://blog.technovert.com/2014/02/common-pitfalls-angularjs/