条件是没有正确检查ng-if with!state.include

时间:2018-04-09 10:28:45

标签: javascript angularjs

     <select class="form-control"
     ng-if="((!$state.includes('home.allprojects') ||
     !$state.includes('home.Sentprojects')) &&
     !dynamicFields.isShowVismaButtons)" 
     ng-model="projects.selectedBokYear" ng-change="onBokYearChange()"
     ng-options="font.value for font in projects.bokYears"></select>

如果状态不在home.allprojects或home.Sentprojects和!dynamicFields.isShowVismaButtons

中,则必须显示代码

ng-if =&#34;((!$ state.includes(&#39; home.allprojects&#39;)||!$ state.includes(&#39; home.Sentprojects&#39;)) &amp;&amp;!dynamicFields.isShowVismaButtons)&#34;

但即使在home.allprojects和home.Sentprojects状态

中,Select也是可见的。

任何人都可以为它提供解决方案

1 个答案:

答案 0 :(得分:0)

无法访问html中的$state

而是编写一个function来定义你的逻辑并从你的HTML中调用该函数,或者你可以使用variable并在html中使用state }

我更喜欢使用我在答案中添加的功能。

<强> HTML:

<select class="form-control"
ng-if="checkState()"
ng-model="projects.selectedBokYear" ng-change="onBokYearChange()"
ng-options="font.value for font in projects.bokYears"></select>

在控制器中,

$scope.checkState = function(){
    return ($state.includes('home.allprojects')) ||
           (!$state.includes('home.Sentprojects')) &&
           (!$scope.dynamicFields.isShowVismaButtons)
}

我已经从HTML创建了一个checkState函数,并在那里定义了你的逻辑。

另外,如果没有亲子直接检查状态,您可以使用 $state.current.name

$scope.checkState = function(){
return ($state.current.name != 'home.allprojects') ||
       ($state.current.name != 'home.Sentprojects') &&
       (!$scope.dynamicFields.isShowVismaButtons)
}