2017-04-11 50 views
0

我用ui-router设置了一个奇怪的设置。由于这是一个非常复杂的布局,请让我不好说明。 (认为​​Google图片搜索/展开)单击item时,ng-if = true并在该行下方显示项目详细信息。Angular Ui-Router标签定位

category //horizontal row of items 
    ---------------------- 
    item item item etc 
    ---------------------- 

    <ui-view ng-if="item-equals-category"> //ui-view under horizontal row 

category 
    ---------------------- 
    item item item etc 
    ---------------------- 

    <ui-view ng-if="item-equals-category2> 

我遇到的问题是:包含的代码执行了21次(21行),尽管通过ng-if被隐藏了。这导致Google API等问题出现问题,因为它会对API进行21次调用并被阻止。有没有办法做到这种布局没有21 ui-views。仅插入选定项目行下的一个用户界面视图。

+1

为什么会有21个电话,如果所有的用户界面不是在直到点击项目,然后一个显示? – elpddev

+0

这就是我的想法。那是'ng-if'no的预期行为?也许我用来评估ng-if的函数是错误的。他们不显示,但内部资源正在加载。我检查确定没有'ng-hide'并且可以确认我正在使用'ng-if' – Auzy

+0

@elpddev感谢您的评论。你让我放心,我做对了,我检查了我的ng-if。发生了什么事是'ui-view'上的那个失败了,然后一个_inside_视图有效地阻止了视图,而不是模板顶部的脚本......固定的。谢谢! – Auzy

回答

0

感谢所有的反馈,导致这个答案。发生了什么是我在加载到ui-view中的内容中将我的JS写入脚本标记中。如果JS在内容中,它将被评估。 ng-if只能阻止代码的执行,如果在指令中以适当的“角度方式”完成的话。

将执行:

<div ng-if="false"> 
    <script> 
     console.log("in HTML") 
    </script> 
</div> 

将不会执行:

myApp.directive('shouldntAppear', function() { 
     return { 
      template: "Shouldn't appear", 
      link: function(){ 
       console.log('from directive'); 
      } 
     }; 
    }); 
<div class="test" shouldnt-appear ng-if="false"> 
</div> 

看看这个CodePen和一套NG-如果真/假看到控制台的差异。