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
-_-
Sergey
pa[aad
Anton
Sergey
Это зависит от того где целевой ui-view контейнер
Anton
вот, мне нужно чтобы при нажатии на аватарку справа открывалась url: /contacts.
Вот эти диалоги справа они есть всегда. Если по урл передавать id, то страница делает релоад, как этого избежать?*
Rem1te
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
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
?*
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
Блин, именованные вью