2015-03-26 23 views
10

Tôi bắt đầu với Angular thông qua Ionic Framework nhưng tôi không hiểu tại sao bộ điều khiển chỉ chạy một lần tức là tôi thay đổi trạng thái, bộ điều khiển chạy, thay đổi trạng thái khác rồi quay lại một lần nữa và bộ điều khiển không chạy lần thứ hai. Đây là tiểu bang của tôi:Góc/Ionic - bộ điều khiển chỉ chạy một lần

$stateProvider.state('container.previous', { 
    url: 'previous', 
    views: { 
     main : { 
      templateUrl : 'views/previous.html', 
      controller : function($scope, $cordovaSQLite){ 
       $scope.firms = []; 
       $cordovaSQLite.execute(window.db, "SELECT * FROM recent GROUP BY phone ORDER by id DESC").then(function(res) { 
        for (i = 0; i < res.rows.length; i++) { 
         $scope.firms.push(res.rows.item(i)); 
        } 
       }, function (err) { 
        console.error(err); 
       }); 
      } 
     } 
    }, 
    onStateChangeStart : function(){ 
     backButton = true; 

    } 
}); 

Ở trạng thái khác, nếu bạn nhấp vào nút liên quan đến "công ty", nó sẽ lưu dữ liệu "công ty" vào bộ nhớ cục bộ. Trạng thái trên cho thấy các công ty mà trước đây bạn đã nhấp vào. Nhưng tôi không thể tìm ra cách cập nhật $scope.firms một cách chính xác vì bộ điều khiển không bao giờ chạy lại.

Có ai có thể giúp tôi không?

Trả lời

22

Bạn có thể đặt mã bạn muốn chạy trong $ ionicView.enter:

controller : function($scope, $cordovaSQLite){ 
    $scope.$on('$ionicView.enter', function() { 
     // code to run each time view is entered 
    }); 

    ... 
}); 

Xem "Xem vòng đời và sự kiện": http://ionicframework.com/docs/api/directive/ionView/

2

Ionic có cơ chế bộ nhớ cache bên trong. Bạn có thể vô hiệu hóa bộ nhớ đệm trên toàn cầu trong chức năng cấu hình của bạn như sau:

$ionicConfigProvider.views.maxCache(0); 
4

Bạn không cần phải tắt toàn bộ bộ nhớ cache của ứng dụng. Nếu bạn muốn chạy lại bộ điều khiển mỗi khi bạn nhập vào nó, bạn nên xóa cache trước khi bạn rời khỏi nó:

$scope.$on("$ionicView.afterLeave", function() { 
     $ionicHistory.clearCache(); 
}); 
+0

Câu hỏi nhanh, điều này xóa tất cả bộ nhớ cache, bạn có thể xóa bộ nhớ cache cho một trạng thái đó không? –

+0

Tôi nghĩ rằng bộ nhớ cache rõ ràng dinamically cho chỉ có một nhà nước là không thể được nêu ra.bạn có thể cấu hình trạng thái của mình để không được lưu trong bộ nhớ cache nhưng cách đó trạng thái sẽ không bao giờ được lưu trong bộ nhớ cache –

+0

như trong cách @ brandyshea đã trình bày? Ok chúc mừng –

2

Đặt điều này trong chế độ xem ion của bạn.

<ion-view cache-view="false">

5

Xây dựng về câu trả lời @ brandyshea, tôi muốn nói thêm nếu bạn muốn chỉ định không có bộ nhớ đệm trong một khu vực/controller/tiểu bang, và tận dụng lợi thế của bộ nhớ đệm trong các lĩnh vực khác, bạn chỉ cần sử dụng thông số cache trong số $stateProvider cho trạng thái đó.

Disable bộ nhớ cache trong cung cấp dịch vụ nhà nước

$stateProvider.state('myState', { 
    cache: false, 
    url : '/myUrl', 
    templateUrl : 'my-template.html' 
}) 

Ngoài ra, bạn có thể sử dụng một trong những phương pháp khác quá:

Disable bộ nhớ cache với một thuộc tính

<ion-view cache-view="false" view-title="My Title!"> 
... 
</ion-view> 

Vô hiệu hóa bộ nhớ cache toàn cầu ly Các $ ionicConfigProvider có thể được sử dụng để thiết lập các quan điểm tối đa cho phép có thể được lưu trữ, nhưng điều này cũng có thể được sử dụng để vô hiệu hóa tất cả các bộ nhớ đệm bằng cách thiết lập nó để 0.

$ionicConfigProvider.views.maxCache(0); 

Tài liệu tham khảo: http://ionicframework.com/docs/api/directive/ionNavView/http://ionicframework.com/docs/api/directive/ionView/

Các vấn đề liên quan