2016-02-24 47 views
0

我有一個用戶對象,它包含一個返回true或false的函數,我想在ng-if中使用以顯示/不顯示某些元素我的模板。它完美的工作,除非我把ng-if放在ng-repeat中。然後它停止工作,我不知道爲什麼。該函數在我登錄時返回正確的值,所以它不應該是該函數的問題。我甚至嘗試用一個總是返回true的測試函數來切換它,但即使這樣也行不通。ng-if內部ng-repeat使用控制器功能時不起作用

這是測試功能,應該工作:

vm.test = function() { 
       return true; 
      } 

這是模板:

<div class="row" ng-controller="techniquesController as techniques"> 
    <div class="col-sm-10"> 
     <div class="card"> 
      <div class="card__header text-centered" style="overflow: hidden;"> 
       Tekniker 
      </div> 

      <div ng-if="!techniques.techniques.$resolved" class="center-align padding-xlarge"> 
       <i class="fa fa-spin fa-spinner text-large"></i> 
      </div> 

      <div class="padding-xlarge"> 
       <div ng-repeat="(category, techniques) in techniques.techniquesGrouped"> 
        <h2 class="h3 margin-top-large">{{category}}</h2> 
        <ul class="list list--striped list--hoverable list--compact"> 
         <li class="show-at-hover__target" ng-class="{'list__item': true, 'divider-bottom': !$last}" ng-repeat="technique in techniques | orderBy:['Name']" tabindex="-1"> 

          <div class="list__item__primary-content"> 
           <div class="list__item__headline">{{technique.Name}}</div> 
          </div> 

          <div class="list__item__secondary-content"> 
           <div class="button-group show-at-hover__element" ng-if="techniques.test() === true"> 
            <button ui-sref="technique({techniqueId:technique.Id})" class="button button--compact button--raised-third text-small" ripple><i class="fa fa-pencil fade-75"></i></button> 
            <button ui-sref="techniqueDelete({techniqueId:technique.Id})" class="button button--compact button--raised-secondary text-small" ripple><i class="fa fa-trash fade-75"></i></button> 
           </div> 
          </div> 
         </li> 
        </ul> 
       </div> 
      </div> 
     </div> 
    </div> 
    <!-- works fine below --> 
    <div class="col-sm-2 center-align" ng-if="techniques.currentUser.IsAdmin()"> 
     <a ui-sref="techniqueNew" class="FAB application-main__fab"> 
      <i class="fa fa-plus"></i> 
     </a> 
    </div> 
</div> 

如果我替換該行:

<div class="button-group show-at-hover__element" ng-if="techniques.test() === true"> 

<div class="button-group show-at-hover__element" ng-if="'true' === 'true'"> 

它的工作,它顯然應該。但是,爲什麼我在使用ng-if時遇到了問題,如果這與控制器一起工作,但只有當我把它放入ng-repeat時纔有問題?我不明白爲什麼IsAdmin()或test()函數可以在ng-repeat之外工作,但不在裏面?

回答

1

因爲你重新分配你的ngRepeattechniques變量 - 控制器的別名被覆蓋:

<div ng-repeat="(category, techniques) in techniques.techniquesGrouped"> 

更改value財產別的東西:

<div ng-repeat="(category, tech) in techniques.techniquesGrouped"> 
+0

謝謝!我更改了控制器別名,以使其更具可讀性。猜猜我是在錯誤的地方尋找問題。 – spersson

+0

@spersson - 第二組眼睛可以創造奇蹟:D – tymeJV