我已经描述了像
这样的状态 `.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 == ""
答案 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;
}
});
)}
}