2016-09-10 1 views
2
angular.module("mobApp.controllers") 
.controller("ViewPostController",function($scope 
    , $stateParams, Utils, PublishMessageService, $state, $ionicActionSheet, $ionicModal, Constants, ShareObjectService) { 

    var postId = $stateParams.postId; 
    $scope.post = {}; 
    $scope.BASE_URL = Constants.SERVER_URL; 
    $scope.$on('$ionicView.loaded', function() { 
    $scope.utils = Utils; 
    resetScopeVariables(); 
    loadPost(); 
    }); 

    $scope.reload = function() { 
    loadPost(); 
    } 

    $scope.vote = function(eventSource, voteType) { 
    Utils.vote(eventSource, voteType, postId, postId); 
    } 

    loadPost = function() { 
    resetScopeVariables(); 
    if(Utils.hasInternet()) { 
     PublishMessageService.viewPublishMessage(postId).then(function(d){ 
     if(d.data.post) { 
      $scope.showPost = true; 
      $scope.post = d.data.post;   
      $scope.showContentLoading = false; 
      ShareObjectService.setPostPhotoIds($scope.post.photosIds); 
     } else { 
      showInlineMessage(Utils.prepareErrorMessage("Nothing Was Found", "Sorry requested content is not available.")); 
     }  
     }, function(err) { 
     showInlineMessage(Utils.prepareErrorMessage("Sorry!", err.description)); 
     }); 
    } else { 
     showInlineMessage(Utils.prepareErrorMessage("Can't Connect", Constants.MSG_NO_INTERNET)); 
     $scope.showReloadBtn = true; 
    } 
    } 

    $scope.showPostMoreOptions = function(postId) { 
     $ionicActionSheet.show({ 
     buttons: [ 
      { text: '<i class="icon ion-edit"></i> Edit' }, 
      { text: '<i class="icon ion-trash-a"></i> Delete' } 
     ], 
     buttonClicked: function(index) { 
      if(index === 0) { 
     $state.go('app.publish-message-form', {'edit': true, 'postId': postId});   
      } else if(index === 1) { 

      } 
      return true; 
     }, 
     destructiveButtonClicked: function() { 
      return true; 
     } 
     }); 
    } 

    /* 
    Utils function 
    */ 

    function resetScopeVariables() { 
    $scope = { 
     pageInlineMsg: '', 
     contentLoadingMessage: 'Loading..', 
     showReloadBtn: false, 
     showContentLoading: true, 
     showPost: false 
    };  
    } 

    function showInlineMessage(msg) { 
    $scope.pageInlineMsg = msg; 
    $scope.showContentLoading = false; 
    } 
}); 

Hier ist mein Router

$stateProvider 
     .state('app', { 
      url : '/app', 
      abstract : true, 
      templateUrl: 'templates/globalLeftMenu.html', 
      controller: 'GlobalLeftMenuController'     
     })  
     .state('app.view-post', { 
      url: '/view-post/:postId', 
      views: { 
      'app': { 
       templateUrl: 'templates/publish_message/view_post.html', 
       controller: 'ViewPostController' 
      } 
      } 
     }) 

Hier bin ich Daten immer für $scope.post aber es reflektiert nicht in Vorlage. Wenn ich $scope.$apply() verwende, dann erhalte ich Fehler $scope.$apply is not a function. Ich weiß nicht, warum ich plötzlich solche Probleme bekomme. Früher hat es gut funktioniert.

Antwort

3

es mit $scope.$apply() Versuchen und

function resetScopeVariables() { 
    $scope = { 
     pageInlineMsg: '', 
     contentLoadingMessage: 'Loading..', 
     showReloadBtn: false, 
     showContentLoading: true, 
     showPost: false 
    };  
} 

zu

function resetScopeVariables() { 
    $scope.pageInlineMsg = ''; 
    $scope.contentLoadingMessage = 'Loading..'; 
    $scope.showReloadBtn = false; 
    $scope.showContentLoading = true; 
    $scope.showPost = false; 
} 

wie zuvor ändern setzen Sie $scope auf ein völlig neues Objekt und daher können Sie $scope.$apply nicht mehr nennen.

+1

Richtig! Einstellung '$ scope = {...}' - ein anderes Objekt macht keinen Sinn .. Es ist wie ein Verbrechen .. PO hätte das wissen müssen. – Paritosh

+0

nur '$ scope = {}' in '$ scope.fields' zu ändern löste es. es ist nicht nötig, '$ scope. $ apply' zu verwenden – manish

Verwandte Themen