4

I'm trying to update the view after adding a new record and updating the model. On the income account details page you can add a new record via a form that pops up in a modal. After submitting the form the modal closes adds the new record to the db and updates the model.

income_account_details.html

<ion-view view-title="Account Details: {{incomeAccount.accountName}}">
    <ion-nav-buttons side="right">
        <button class="button button-icon" ng-click="newIncome()">
            <i class="ion-android-add icon"></i>
        </button>
    </ion-nav-buttons>
    <ion-content>
        <ion-list>
            <div class="list card" ng-repeat="record in incomeAccountRecords">
                <div class="item item-divider">
                    <h2>{{record.date}}</h2>
                </div>
                <div class="item item-body">
                    <p>${{record.amount}} note: {{record.note}}</p>
                </div>
            </div>
        </ion-list>
    </ion-content>
</ion-view>

controller.js

...
.controller('IncomeAccountsDetailsCtrl', function($scope, $stateParams, dbService, ModalService) {
    $scope.incomeAccountRecords = {};
    $scope.incomeAccount = {};

    $scope.load = function(){            
        dbService.getRecordsByAccountDb($stateParams.account_id).then(function(incomeAccountRecords){
            $scope.incomeAccountRecords = incomeAccountRecords;
        });
        $scope.incomeAccount = dbService.getIncomeAccountDb($stateParams.account_id);
    }

    $scope.load();

    $scope.newIncome = function(){
      ModalService
        .init('templates/income.html', $scope)
        .then(function(modal){
            modal.show();
        });
    }

    $scope.addIncome = function(form){
        dbService.addIncomeDb($scope.incomeAccount.id, form.amount.$viewValue, form.date.$viewValue, form.note.$viewValue);
        $scope.load();
        $scope.closeModal();
    }
})
...

The issue that I am running into is after submitting the form the model is getting updated(verified through console.log()) but the view is not. If I refresh the page it shows the correct information.

I disabled cache in the state. I have tried adding $scope.$apply in the load() function but that through an error "$digest already in progress"

Is there a way to refresh the view after the model is updated?

Edit: I was able to reload the state by injecting $state into the controller and calling $state.reload() to refresh the page.

.controller('IncomeAccountsDetailsCtrl', function($scope, $stateParams, dbService, ModalService, $state) {

$scope.addIncome = function(form){
    dbService.addIncomeDb($scope.incomeAccount.id, form.amount.$viewValue, form.date.$viewValue, form.note.$viewValue);
    $scope.load();
    $scope.closeModal();
    $state.reload();
}
5
  • After updating the data... try to reload the state Commented Feb 12, 2016 at 5:27
  • How would you reload the state from within the controller? Commented Feb 12, 2016 at 6:22
  • @Anilkumar This worked. I added $state as a dependency in the controller then called $state.reload() at the end of the addIncome function. Commented Feb 12, 2016 at 6:50
  • Ok I will post a sample answer ... Please accept it and Upvote it @John Commented Feb 12, 2016 at 6:52
  • Thank you so much :) for accepting the answer Commented Feb 12, 2016 at 6:59

5 Answers 5

6

Please find this answer it may be useful for you
As
After you finished your changes in your modal box

$state.transitionTo("Your current state name", "You can pass any parameters", "Forcefully reloading the view ");

see the below example
1st method

$state.transitionTo($state.current, {seqId: ''}, { reload: true});

or 2nd method

$state.reload()

Sign up to request clarification or add additional context in comments.

Comments

0

Push newly added record to $scope.incomeAccountRecords.

2 Comments

The model is updated correctly in the controller. The view for some reason does not reflect the change.
$timeout(function () { $scope.$apply(function () { $scope.incomeAccountRecords.push(<your newly added record>); }); }, 1000);
0

The "load" function is getting called within "addIncome" which is updating the "$scope.incomeAccountRecords". This should automatically update the view. You should check what the "$scope.closeModal()" call is doing. Probably that is causing an issue.

1 Comment

this is the closeModal() function $scope.modal.hide();
0

You can use $state.transitionTo or $state.go('', {reload: true}) and $state.reload.

but if you want to make each controller reload after view change

myApp.config(function($ionicConfigProvider) {$ionicConfigProvider.views.maxCache(0);}

Comments

-2

try this

  router.setUpRoutes();

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.