Anonymous
@Ai_boy спасибо!)
Vlad
Привет всем.
Может кто-нибудь подсказать, почему не идет связь между директивой и контроллером?
Упрощенно код выглядит так:
// Директива
directives.directive('someDirective', [
function () {
return {
scope: {
coordinates: '=',
},
restrict: "A",
link: function (scope, element, attrs, ngModel) {
if (typeof scope.coordinates !== "undefined") {
$timeout(function() {
scope.coordinates = 123;
scope.$apply();
}, 500);
}
}
};
}
]);
// Контроллер
controllers.controller('SomeController', function ($scope, $state, $rootScope) {
$scope.uploadedImageCoordinates = false;
}
// Шаблон
<img some-directive=""
data-coordinates="uploadedImageCoordinates"
/>
{{ uploadedImageCoordinates }}
При этом в шаблоне uploadedImageCoordinates связан и с контроллером и с директивой, при смене значения в 1 из них в шаблон изменения попадают. А при смене значения в директиве значение в контроллер не попадают.
Vlad
С подсветкой синтаксиса
https://yadi.sk/i/WelY4afNuFKaP
Mykola
дык, может все-таки нужно сам controller: ‘SomeController’ прописать?
Vlad
А куда прописать?
Mykola
в обект, там где return { ...}
Mykola
и вообще, помоему можно и без link обойтись. Запихнуть проверку в контроллер
Vlad
Так не помогло прописывание контроллера
//...
scope: {
coordinates: '=',
},
controller: 'SomeController',
restrict: "A",
//...
Vlad
Все равно не срабатывает
(;¬_¬)
а почему в кавычках-то?
Mykola
потому что он обьевляет его через .controller
Mykola
если бы у него прям там же был этот контроллер-функция, то можно было бы и явно
Vlad
Интересно, что значение из контроллера в директиву нормально передается
Mykola
О, спасибо. А это я вам именно скидывал или вы просто с этого чата под шумок тоже посмотрели ? )
(;¬_¬)
Mykola
аааа
(;¬_¬)
и как бы самого ключевого там нет =)))
(;¬_¬)
😃
Mykola
Пока я их делал, я дошел до мысли, что оно не актально. Пора бы забывать первый ангуляр. В итоге энтузиазм немного подупал 😒
Mykola
Кстати лайк поставили? )))))
Mykola
ну или дизлайк
Mykola
все должно быть честно
(;¬_¬)
эм... ща гляну =) так не вспомню...я просто несколько дней созерцал не по одному разу =)
Mykola
Ну хоть чтото подчерпнули?
(;¬_¬)
конечно =)
(;¬_¬)
спасибо
Oleg
Привет, вопрос:
Есть сервис, в нем функция получения объектов из базы
this.getItems = function() {
return $http.get('https:....');
};
Потом в контроллере приходится
ItemService.getItems().then((response) => {
this.items = response.data;
}).catch(() => {
});
А если контроллеров много то приходится так делать везде, можно ли как-то сделать так чтобы из сервиса возвращался уже готовый объект?
Oleg
и вопрос 2 - как оформляется код в телеграмме)
(;¬_¬)
(;¬_¬)
=_=
(;¬_¬)
однострочный одна ` в начале и в конце
Oleg
Спасибо
Oleg
Привет, вопрос:
Есть сервис, в нем функция получения объектов из базы
this.getItems = function() {
return $http.get('https:....');
};Потом в контроллере приходится
ItemService.getItems().then((response) => {
this.items = response.data;
}).catch(() => {
});А если контроллеров много то приходится так делать везде, можно ли как-то сделать так чтобы из сервиса возвращался уже готовый объект?
Michail
Oleg
Aleksei
всё зависит от того, что вам конкретно нужно. если нужно в нескольких местах\несколько раз в контроллере дёргать метод получения данных - пихайте его в сервис и дёргайте. если нужно разово получить данные и что-то делать с ними в контроллере - лучше запихнуть в резолв стейта и инжектить в контроллер
Michail
Michail
*ее
Oleg
Несколько раз не выводятся, только получаются и потом в разных местах используются
Oleg
Мне потом в разных компонентах нужен этот массив использовать и каждый раз приходится асинхронно вызывать и обновлять
Aleksei
в сервисе во время вызова после получения можно записать ответ в переменную сервиса
Ilya 🃏
Народ, никто не пытался организовать динамические страницы со своими контроллерами?
Встала задача, где нужно иметь возможность создавать страницы, которые являются описанием к элементу каталога, но эти страницы нужно верстать отдельно, с отдельным контроллером
Ilya 🃏
Захламлять основную верстку не хочется, было бы круто все это пихать в отдельный файл ITEMNAME.html, в котором бы инициализировался контроллер
Ilya 🃏
В принципе почти все получилось, но когда я инициализировал контроллер, ниже подключаю блок с ng-controller, тут и начинается веселье. Контроллер успешно был создан, но применить его на блок неполучается. Есть идеи?
Ilya 🃏
Или может кто подскажет по-другому как-то реализовать
Ilya 🃏
Каждая страница берется из папки, а загрузка страницы происходит посредством встраивания функции в роутере в templateUrl, где из ссылки генерируется имя файла и его соответсвенно загружает
Aleksei
Ilya 🃏
Короче,
.when('/catalog/:element*', {
templateUrl : function(url_attrs){
console.log(url_attrs.element);
return path + '_catalog/' + url_attrs.element + '.html'
},
controller : 'elementController'
})
Ilya 🃏
Нужно, чтобы имя контроллера тоже было динамическим
Ilya 🃏
а лучше всего, грузилось из файла
Ilya 🃏
Нашел resolve: resolveController(), но не уверен, что туда получится пихать разное имя файла-контроллера
Michail
Нужно, чтобы имя контроллера тоже было динамическим
Интересная задача. Я бы попробовал выйти из под ui-router, сделать state с какимнить customTemplateController - как обертку и в нем разруливать подгрузку разных шаблонов и разных js - они станут его child scope и будут внутри него
Dreamerinnoise
Делал подобное через uirouter+requirejs, стейты формировались из json файла
Ilya 🃏
Все-таки решил сильно не выпендриваться, а просто JS файл тянуть файл через $http get и eval'ить его
Ilya 🃏
Но вот в чем трабл, он почему-то не выполняет callback
Ilya 🃏
Т.е. все получается, но функция успешного ответа не срабатывает вовсе
Ilya 🃏
буд-то не существует её вообще
Ilya 🃏
$http({
method: 'GET',
url: link_js
}).then(function(res){
console.log(res);
}, error => console.log(error));
Ilya 🃏
попробовал впилил ajax (jquery), все работает, но $http не принимает
Aleksei
eval - это самый-самый последний способ что-либо сделать в JS
Ilya 🃏
да я сам нехотя согласился на это
Ilya 🃏
но пока нормальной и быстрой реализации, без переделки всего и вся не вижу
Ilya 🃏
здесь по сути нужно только дать жизнь скрипту из файла, чтобы был доступ к контроллеру, а сделать это чистой реализацией angular дико трудно
Ilya 🃏
это нужно каждый уголок an знать, чтобы такое запилить
Ilya 🃏
Хорошо что можно в templateurl вставить функцию, которая принимает параметры ссылки ангуляра, иначе и здесь были бы траблы
Anonymous
Anonymous
Вот что на stackoverflow пишут - http://stackoverflow.com/questions/27465289/angularamd-ui-router-dynamic-controller-name
Ilya 🃏
Хм, вроде все прикольно, только смущает, что все пути должны быть обязательно заранее прописаны в main.js "paths"
Ilya 🃏
Т.е. я могу только кидать require к якорю из paths, в котором настоящее имя файла
Ilya 🃏
И полностью перепиливать продакшн приложение из-за одного раздела, не прикольно, тем более дедлайн через неделю)
Ilya 🃏
Ладно, скрести на душе будет до конца моих дней о том, что я использовал eval, но теперь у меня другой трабл.
Можно ли как-то сделать редирект, если templateurl не нашел шаблон?
Ilya 🃏
Т.е. перед тем, как перейти на страницу catalog/element_name проверить, существует ли он и если нет, редирект на 404
Ilya 🃏
подключить $location в app.config не получится, попытался вынести оттуда кусочек .when() со всей архитектурой подгрузки шаблона, но все-равно выдает ошибку и ждет возвращения правильной ссылки на шаблон
Ilya 🃏
Вот в этом самом месте
Ilya 🃏
Короче,
.when('/catalog/:element*', {
templateUrl : function(url_attrs){
console.log(url_attrs.element);
return path + '_catalog/' + url_attrs.element + '.html'
},
controller : 'elementController'
})
Anonymous
не понял про require
Ilya 🃏
Там ведь всю структуру приложения придется перепиливать
Ilya 🃏
Все переделывать на лад require'a
Ilya 🃏
из текущего стандартного route