2016-04-19 52 views
0

我已經遠離angular 1.x很長一段時間,我似乎忘記了一些重要的事情ng-if。我有一個函數,當輪播更改正在跟蹤輪播陣列的活動索引的圖像時,會更新範圍值。我有ng-if組刪除一個元素並插入另一當指數到達陣列的結束,像這樣:

<span ng-if="activeIndex < 4" 
     class="back-button" 
     ui-sref="app.profile.index({uID: user.uID})"> 
    Skip <i class="ion-chevron-right"></i> 
    </span> 

    <span ng-if="activeIndex === 4" 
     class="skip-button" 
     ui-sref="app.profile.index({uID: user.uID})"> 
    Continue <i class="ion-chevron-right"></i> 
    </span> 

,但它無法正常工作。我相信ng-if創建了一個新的範圍,這可能是爲什麼它不捕獲更新的值,但如果是這樣的話,更新ng-if的範圍的簡單方法是什麼?還是我完全轉身?

這裏是顯示我的問題codepenhttp://codepen.io/datatype_void/pen/zqjGOr?editors=1001

+0

爲什麼你存儲'$ scope.activeIndex = '0';'作爲一個字符串,而不是'int'? – user1027620

+0

你是對的,它創造了一個新的範圍。你可以嘗試ngHide和ngShow。 – aet

+0

順便說一句,你提供的筆中的最大索引是'2' ...你在'ng-if'中將它與'4'進行比較... – user1027620

回答

1

我加了$scope.$apply();的activeIndex變化後,並解決了這個問題。

function(swiper){ 
    $scope.activeIndex = swiper.activeIndex; 
    $scope.$apply(); 

雖然我不知道爲什麼它不會自動應用。

工作代碼:http://codepen.io/C14L/pen/bpKrLo?editors=1111

(也改變了最大值爲2,因爲它從來沒有得到4之前,但那不是問題。)

1

的JavaScript:

angular.module('ionicApp', ['ionic']) 

.controller('MainCtrl', function($scope, $timeout) { 
    $scope.updateIndex = function(index) { 
    $timeout(function() { 
     $scope.activeIndex = index; 
    }); 
    }; 

    $scope.options = { 
    autoplay: 300, 
    speed: 500, 
    effect: 'cube', 
    onSlideChangeStart : function(swiper){ 
     if (swiper.activeIndex !== 'undefined') { 
     $scope.updateIndex(swiper.activeIndex); 
     } 
    } 
    } 

    $scope.updateIndex(0); 
}); 

HTML:

<span ng-if="activeIndex < 2" 
     ui-sref="app.profile.index({uID: user.uID})"> 

    Skip <i class="ion-chevron-right"></i> 
</span> 

<span ng-if="activeIndex == 2" 
     ui-sref="app.profile.index({uID: user.uID})"> 

    Continue <i class="ion-chevron-right"></i> 
</span> 

AngularJS提供$超時,這就像setTimeout,但默認情況下自動將代碼封裝在$ apply中。

欲瞭解更多信息: http://www.codingeek.com/angularjs/angular-js-apply-timeout-digest-evalasync/