在路由更改时未刷新的角度组件(在ui路由器中)

时间:2017-08-29 11:17:03

标签: angular-ui-router angularjs-scope angular-components

我已经描述了像

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

当我使用$ state.go(“community.messaging.user”)时 它打开该组件,但在更改另一个状态或转到状态“community.messaging.user”后,它不会清除之前初始化的组件控制器中的先前值。 我的组件就像这样

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'}

和控制器就像

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;
           }
        });
    )}
} 

我第一次进入状态self.currentSelectedChatUser.room == ""但是当我再次来自其他州时,它会在if语句中显示self.currentSelectedChatUser.room == "someroomid"但它应该是self.currentSelectedChatUser.room == ""; 如果重新加载浏览器,则设置为self.currentSelectedChatUser.room == ""

1 个答案:

答案 0 :(得分:0)

这是因为每次更改状态时都不会重新初始化控制器。您可以使用$ onInit hook在每次到达时初始化控制器,请尝试:

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;
        }
     });
  )}
}