Javascript 使用ngshow改进AngularJS视图更新

Javascript 使用ngshow改进AngularJS视图更新,javascript,angularjs,ng-show,angularjs-view,Javascript,Angularjs,Ng Show,Angularjs View,现在我有一个视图,当满足某些条件时,使用ng show显示selectDOM对象,在所有其他情况下,使用ng show显示inputDOM对象。当我这样做并在这两种情况之间切换时,input框消失的时间要比出现select时长。延迟是非常明显的,所以我想对其进行改进,使两个DOM更改之间的延迟非常小 有没有办法做到这一点 <div> <input ng-show="field && (type == 'search' || fieldBucket[field

现在我有一个视图,当满足某些条件时,使用ng show显示
select
DOM对象,在所有其他情况下,使用ng show显示
input
DOM对象。当我这样做并在这两种情况之间切换时,
input
框消失的时间要比出现
select
时长。延迟是非常明显的,所以我想对其进行改进,使两个DOM更改之间的延迟非常小

有没有办法做到这一点

<div>
  <input ng-show="field && (type == 'search' || fieldBucket[field].moreBuckets)"
         type="text" ng-model="value">
  <select class="facet-value"
          ng-show="field && type == 'filter' && !fieldBucket[field].moreBuckets"
          ng-model="value"
          ng-options="fieldBucket[field].buckets">
  </select>
</div>

我不认为它与ng show或hide有任何关系,它可能取决于您希望从服务器得到的一些数据作为响应。 我已经为您创建了一个简单的演示,在基本ng显示/隐藏中,如果同时设置了它们的值,则不会有任何分支

<!doctype html>
<html ng-app>
  <head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script>
  </head>
  <body>
    <div class="wrapper" ng-app="test">
      <div class="phone" ng-controller="TestCtrl" ng-init="type = 'search'">
        <a href="" ng-click="type = 'search'"> search</a>
        <a href="" ng-click="type = 'filter'"> filter</a>
        <div >
          <input ng-show="type == 'search'"
            type="text" ng-model="value">
          <select class="facet-value"
            ng-show="type == 'filter'"
            ng-model="value"
            ng-options="obj.name for obj in list">
          </select>
        </div>
      </div>
    </body>
    <script type="text/javascript">
      var app = angular.module('test', []);

      function TestCtrl($scope) {
        $scope.list = [{name : 'one'}, {name : 'two'}];
      }
  </script>
</html>

var app=角度模块('测试',[]);
函数TestCtrl($scope){
$scope.list=[{name:'one'},{name:'two'}];
}

您确定您的情况在同一时间发生变化吗?i、 e.当一个变为假时,另一个会立即变为真吗?@HankScorpio我对代码做了一些修改,使其更简单,但我很确定它们应该同时更改。我尝试的另一件事是将一个设置为
ng hide
,另一个设置为
ng show
,但它仍然存在相同的问题。我认为问题不在于ng show、ng hide、ng if或任何其他指令。更可能的情况是,条件没有同时改变。也许其中一个依赖于某个异步事件,比如服务器响应?不管怎样,你发布的html都没有问题。我建议显示更多的代码,包括条件如何变化。按照SO准则,请创建一个plunker,如果可能的话,它会复制这个问题。@Hankscopio但是从我共享的代码来看,这两个指令都依赖于相同的三个变量,所以不应该有任何异步进程延迟任何一个。我会把一个演示放在一起,展示这个过程。我有点误读了你的帖子。我看到,当您从
切换到
时,它们都会同时显示,因此条件必须同时为真。非常奇怪。你认为如果我做了更改,使指令绑定到布尔变量而不是计算角度表达式,会使DOM操作同步吗?原因可能是在ng show/hide中进行计算。甚至布尔运算的性能也是一样的。它最后只对布尔值起作用。它评估您的表达,并仅表示为真或假。然后ng show=“type”和ng show=“!type”将具有相同的性能。