3

i ont décrit mes états commecomposants angulaires non rafraîchissants sur le changement d'itinéraire (en routeur ui)

`.state('community.messaging', { 
     template: '<ui-view></ui-view>', 
     url: '/messaging', 
     abstract: true 
    })  
    .state('community.messaging.user', { 
     url: '/user/:userId', 
     component: 'messagingComponent', 
    })` 

et quand j'utilise state.go $ (« community.messaging.user ») il ouvre ce composant , mais après avoir changé un autre état en arrière ou aller à l'état "community.messaging.user" il n'efface pas les valeurs précédentes dans ce contrôleur de composant que j'ai initialisé avant. mon composant est comme ce

import messagingController from "./messaging.controller.js"; 
export const messagingComponent = 'messagingComponent'; 
export const messagingComponentOptions = { 
templateUrl: './src/app/components/messaging/messaging.html', 
controller: ['$scope', '$localStorage', '$rootScope', '$transitions', '$timeout', '$cookies', '$state', '$stateParams', 'communityApi', messagingController], 
controllerAs: 'ctrl'} 

et contoller est comme

function messagingController($scope, $localStorage, $rootScope, $sanitize, $transitions, $cookies, $state, $stateParams, communityApi) { 
    const self = this; 
    self.currentSelectedChatUser = { 
     id: $stateParams.userId, 
     room: '' 
    }; 
    self.message = ''; 
    self.chatData = []; 
    socket.on('connect', function() { 
     socket.emit('initiate', $stateParams.userId) 
     socket.on('privateRoomCreated', function (data) { 
      if(`self.currentSelectedChatUser.room == ""`) { 
       self.currentSelectedChatUser.room = data.room; 
      } 
     }); 
    )} 
} 

première fois quand je vais cet état self.currentSelectedChatUser.room == "" mais quand je suis venu à nouveau d'autres état dans lequel il montre self.currentSelectedChatUser.room == "someroomid" si la déclaration, mais il devrait être self.currentSelectedChatUser.room == ""; et si le navigateur de rechargement est défini sur self.currentSelectedChatUser.room == ""

Répondre

0

C'est parce que votre contrôleur n'est pas réinitialisé chaque fois que vous changez d'état. Vous pouvez utiliser le $ onInit hook pour initialiser votre contrôleur chaque fois que vous l'atteignez, essayez:

function messagingController($scope, $localStorage, $rootScope, $sanitize, 
$transitions, $cookies, $state, $stateParams, communityApi) { 
    const self = this; 
    self.$onInit = function() { 
    self.currentSelectedChatUser = { 
      id: $stateParams.userId, 
      room: '' 
    }; 
    }; 
    self.message = ''; 
    self.chatData = []; 
    socket.on('connect', function() { 
    socket.emit('initiate', $stateParams.userId) 
    socket.on('privateRoomCreated', function (data) { 
     if(`self.currentSelectedChatUser.room == ""`) { 
      self.currentSelectedChatUser.room = data.room; 
     } 
    }); 
)} 
}