ish_ty
https://www.barryvan.com.au/2009/01/onfocus-and-onblur-for-divs-in-fx/
Anton
Ну вот есть два файла JS (angular)
Anton
могу ли я сделать в файле app1.js: socket.emit(…) а в файле app2.js сделать: socket.on(…) чтобы сразу получуть по сокету данные с app1.js, а не передавать их на сервер, а потом отправлять через сокет.эмит в app2.js
Anton
?
pa[aad
это 2 файла с одного проекта или это разные проекты ? и нужно между ними шарить данные ?
Anton
с одного
Anton
просто это разные модули
pa[aad
зачем вам в рамках 1 приложение гонять данные между 2 модулями этого приложения через сокет ?
Sergey
И почему тогда сокет не засунуть в сервис? Раз уж у вас там нг1
Sergey
В чём именно проблема? Синглтон нужен?
Anton
ну вот у меня есть список контактов url : /contacts и есть чат, который доступен по любому url ( он всегда открыт ) и мне нужно на нажатие на аватар участника чата открывать url == /contacts и туда передавать contact_id который я должен найти в списке контактов. Я думаю, что его нужно передавать через сокет
Rem1te
А я думал что параметры передают через урл
Rem1te
-_-
Anton
в url передайте ваш id, облегчите жизнь себе
так страничка перезагружается
Sergey
Это зависит от того где целевой ui-view контейнер
Anton
вот, мне нужно чтобы при нажатии на аватарку справа открывалась url: /contacts. Вот эти диалоги справа они есть всегда. Если по урл передавать id, то страница делает релоад, как этого избежать?*
Anton
window.location.href = location.origin + '/?state=contacts&id=' + msg.contact_id + '#/contacts';
Rem1te
ниче ен смущает?
Anton
смущает.
Anton
Наверное, поэтому я и прошу помочь
Rem1te
Окей. 1. Обращение к виндов локейшен хреф перезагружает страничку, когда ты меняешь, это сделано что бы ты не мог подменить урл в строке ввода урл, секьюрность все дела. 2. Каким роутером ты пользуешся на проекте?
Anton
angular-ui-router
Rem1te
Хорошая ,если с юай роутером тебе нужен енд поинт принимающий параметр, тебе нужно его описать Например ето будет выглядеть так .state('create', { url: '/create', component: 'create', }) .state('edit', { url: '/edit/:id&?:type', component: 'create', })
Rem1te
После чего благодаря $state сервису из юай роутера ты можешь выполнить следующую магию
Rem1te
$state.transitionTo(urlName, params, options);
Rem1te
где урл нейм - то имя которое ты передаешь при регистрации роута
Rem1te
$state это сервис который нужно заинжектить
Rem1te
вопросы?
Anton
$state.go("app.blog-post", {"id": $scope.currentSelectedRoom.model_id}); вот у меня есть такая тема. Я так понимаю, что это должно быть в самом чате, где аватарки на которые я буду нажимать. а это я размещаю в контроллере ContactCTRL .state(‘getContacts’, { url:’/contacts:id&?type’ component: ‘getContacts’ // этот компонент мне нужно создать, что он делает? }
Anton
все правильно?
Rem1te
$state.go("app.blog-post", {"id": $scope.currentSelectedRoom.model_id}); вот у меня есть такая тема. Я так понимаю, что это должно быть в самом чате, где аватарки на которые я буду нажимать. Тебе нужно переходить на обьявленный урл /contacts И передавать ему айди человечка на которого ты жмякнул По поводу ‘getContacts’ Скорее всего тебе нужно обьясвить ещё один енд поинт для твоего урла /contacts который умеет принимать id для того что бы выполнить переход на него Компонент который ты будешь передавать в этот урл - компонент который отвечает у тебя за страничку контакты
Sergey
У меня смутное чувство что мы это уже обсуждали
Rem1te
У меня смутное чувство что мы это уже обсуждали
солнце должно восходить каждый день :)
Sergey
Sergey
@TheoryOfHype ну тебе никак не избежать чтения документации на ui-router, горячо рекомендую
Anton
А можно тут как-то на открытие использовать функции ContactCtrl .state('app.contact-id', { url: '/contacts/search', data: {}, views: { "content@app": { controller: 'ContactCtrl', templateUrl: "app/modules/contact/views/contact.html", resolve: { permissions: function ($rbac) { return $rbac.checkAccess(ContactDependencies.mostUsedPermissions.concat([ 'CreateServiceObjectServiceObject', 'UpdateServiceObjectServiceObject', ])); }, deps: $couchPotatoProvider.resolveDependencies(ContactDependencies.concat( demandDependencies, lidDep, ordersDep, pricelistDep, taskDep, contractDep )), originLoader: function () { return 'contactModule' }, $uibModalInstance: function () { return null; }//stub for correct loading } } }, onExit: function ($window) { var states = JSON.parse(localStorage.getItem('states')) || {}; console.log(states); if (!_.isUndefined($window.orglinkerBuffer.id) && !_.isUndefined($window.orglinkerBuffer.tab)) { states.contacts = $window.orglinkerBuffer; } else states.contacts = {}; delete $window.orglinkerBuffer; localStorage.setItem('states', JSON.stringify(states)); } });
Anton
@yarrrrrrrr
Anton
@webRMT
Rem1te
метод из контроллера - нет вы можете заинжектить сервис в резолве если вам это нужно
Rem1te
и из него дернуть метод
Sergey
+1 за перенос общедоступных функций в сервисы
Sergey
> permissions: function ($rbac) вот за такие темы кстати минификаторы любят карать
Anton
а вот когда я пишу $state.go('app.contact-id', {"id":msg.contact_id}); то где мне найти этот объект с id в .state(‘app.contact-id’ … ?
Sergey
В $stateParams
Anton
чтобы передать этот id в url
Sergey
Он там будет как $stateParams.id доступен
Sergey
Но чтобы это работало маршрут должен быть объявлен с темплейтом урл параметра
Sergey
state.... url: "{id}"
Sergey
Если app.contact-id это дочерний маршрут app.contact
Anton
.state('app.contact-id', { url: '/contacts/search', data: {}, views: { "content@app": { controller: 'ContactCtrl', templateUrl: "app/modules/contact/views/contact.html", resolve: { permissions: function ($rbac) { return $rbac.checkAccess(ContactDependencies.mostUsedPermissions.concat([ 'CreateServiceObjectServiceObject', 'UpdateServiceObjectServiceObject', ])); }, deps: $couchPotatoProvider.resolveDependencies(ContactDependencies.concat( demandDependencies, lidDep, ordersDep, pricelistDep, taskDep, contractDep )), originLoader: function () { return 'contactModule' }, $uibModalInstance: function () { return null; }//stub for correct loading } } } }).url:'{id}';
Sergey
Короче, урл параметры надо описывать в урл через /some/state/path/{id}/{someOtherShiet}/{andAnotherShiet}
Anton
вот так типа?
Sergey
Не
Sergey
Убери .url(id)
Sergey
url: '/contacts/search', вот туда надо
Sergey
Да почитай ты уже доку, ну блин
Anton
да я читаю
Sergey
Она небольшая, там всё хорошо расписано)
Anton
Она небольшая, там всё хорошо расписано)
.state('app.contact-id', { url: '/contacts:id', data: {}, views: { "content@app": { controller: function($stateParams){ $stateParams.id; }, templateUrl: "app/modules/contact/views/contact.html", resolve: { id:['$stateParams', function($stateParams){ return $stateParams.id; }] } } } }); смотри, я передал параметр через url, а можно ли как-то передать этот параметр, но в контроллере указать не функцию котороя сейчас, а ‘ContactCtrl’ и в этом контроллере уже написать всю логику?
Anton
@yarrrrrrrr
Sergey
Ага, так можно
Sergey
Только url исправь на /contacts/:id
Sergey
И если ты инжектишь объекты как JS объекты function($stateParams) например, то не забывай ngInject
Sergey
Или ["$stateParams", function(params) {......}]
Anton
Или ["$stateParams", function(params) {......}]
Unknown provider: originLoaderProvider <- originLoader <- ContactCtrl а что делать если такая ошибка
Anton
?*
Anton
.state('app.contact-id', { url: '/contacts/:id', data: {}, views: { "content@app": { controller: 'ContactCtrl', templateUrl: "app/modules/contact/views/contact.html", resolve: { id:['$stateParams', function($stateParams){ return $stateParams.id; }] } } }
Anton
проблема в резолве?
Sergey
Да, но верноятно не в этом
Sergey
Оставь как было
Sergey
Потом, если после минификации будут ошибки, то просто знать будешь, что дело в этом может быть
Anton
ну смотри, когда я гружу '/contacts/:id', то у меня ничего не отрабатывает из contactCtrl
Anton
а там вся логика страницы
Anton
и самих контактов нет
Sergey
А у тебя роут же непростой
Sergey
Блин, именованные вью