2017-01-02 8 views
0

Я создаю функцию чата в своем веб-приложении, и я собираюсь создать функцию чата между зарегистрированными клиентами. Вот мой экран из приложения, чтобы показать, что именно я хочу, чтобы решитьУгловой чат-клиент - 2 вида с одним контроллером

Screen of my app

Как вы можете видеть, я получил список интернет-пользователей, хранящихся в области видимости в боковой панели. Его созданный как частичный вид в моем Asp.Net с .cshtml и я отображаю содержимое в «белом ящике» с использованием угловой маршрутизации.

Проблема в том, что я использую один и тот же контроллер дважды, и он создает новую область для каждого html, поэтому я получил данные на боковой панели, но в своем представлении содержимого у меня нет данных. Я думаю о передаче моих данных в корнеплод, но я не знаю, хорошая ли это идея.

Так что мой вопрос. Есть ли что-то, как я могу клонировать мои данные с одного контроллера на другой или как я могу решить это без изменения функциональности, и если я смогу контролировать свои представления с помощью одного контроллера.

Вот мой PrivateChatController.js

(function() { 
'use strict'; 
app.controller('PrivateChatController', ['$rootScope', '$scope', 'SignalRService', '$location', 'PrivateChatService', PrivateChatController]); 
function PrivateChatController($rootScope, $scope, SignalRService, $location, PrivateChatService) { 


    //angular stuff 
    $scope.online_users = []; 

    $scope.isChatHidden = false; 

    $scope.openPrivateChatWindow = function (index) { 
     // $scope.isChatHidden = true; 
     angular.forEach($scope.online_users, function (value, key) { 
      if (index == key) { 
       $rootScope.currentPrivateChatUser = ({ 
        UserName: value.UserName, 
        ConnectionId: value.connectionId, 
       }); 

       $location.path("/details/" + value.UserName); 
      } 
     }); 
    }; 

    $scope.closePrivateChatWindow = function (index) { 
     $scope.isChatHidden = false 
    }; 


    //signalR stuff 
    var chatHub = $.connection.chatHub; 
    $.connection.hub.logging = true; 
    chatHub.client.foo = function() { }; 
    registerClientMethods(chatHub); 
    $.connection.hub.start() 
     .done(function(){ console.log('Now connected, connection ID=' + $.connection.hub.id); }) 
     .fail(function() { console.log('Could not Connect!'); }); 

    function registerClientMethods(chatHub) { 
     //user object 

     chatHub.client.newOnlineUser = function (user) { 
      var newUser = ({ 
       connectionId: user.ConnectionId, 
       UserName: user.UserName 
      }); 

      $scope.online_users.push(newUser); 
      $scope.$apply(); 
     }; 

     //compare scope online users with server list of online users 
     chatHub.client.getOnlineUsers = function (onlineUsers) { 
      //loop through scope 
      angular.forEach($scope.online_users, function (scopeValue, scopeKey) { 
       //loop through received list of online users from server 
       angular.forEach(onlineUsers, function (serverListValue, serverListKey) { 
        if (!(serverListValue.ConnectionId == scopeValue.connectionId)) { 
         var newUser = ({ 
          connectionId: serverListValue.ConnectionId, 
          UserName: serverListValue.UserName 
         }); 
         $scope.online_users.push(newUser); 
         $scope.$apply(); 
        } 
       }) 
      }) 
     }; 

     chatHub.client.onUserDisconnected = function (id, user) { 
      var index = 0; 
      //find out index of user 
      angular.forEach($scope.online_users, function (value, key) { 
       if (value.connectionId == id) { 
        index = key; 
       } 
      }) 

      $scope.online_users.splice(index, 1); 
      $scope.$apply(); 
     }; 
    }};})(); 

ответ

1

Рассмотрите возможность использования услуги в качестве слоя для обмена данных. Он также должен содержать логику, связанную с чатом, на мой взгляд, контроллеры должны быть как можно более тонкими.

Переместить chatHub.client.getOnlineUsers функция обслуживания и создать геттер для users.

Further read

+0

Хорошо, буду проверить это, спасибо за этот совет – Martin

 Смежные вопросы

  • Нет связанных вопросов^_^