
Vlad
16.08.2016
08:12:11
Привет всем.
Может кто-нибудь подсказать, почему не идет связь между директивой и контроллером?
Упрощенно код выглядит так:
// Директива
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 из них в шаблон изменения попадают. А при смене значения в директиве значение в контроллер не попадают.
С подсветкой синтаксиса
https://yadi.sk/i/WelY4afNuFKaP


Николай
16.08.2016
08:16:59
дык, может все-таки нужно сам controller: ‘SomeController’ прописать?

Vlad
16.08.2016
08:18:34
А куда прописать?

Google

Николай
16.08.2016
08:18:52
в обект, там где return { ...}
и вообще, помоему можно и без link обойтись. Запихнуть проверку в контроллер

Vlad
16.08.2016
08:22:38
Так не помогло прописывание контроллера
//...
scope: {
coordinates: '=',
},
controller: 'SomeController',
restrict: "A",
//...
Все равно не срабатывает

(;¬_¬)
16.08.2016
08:23:22
а почему в кавычках-то?

Николай
16.08.2016
08:23:41
потому что он обьевляет его через .controller
если бы у него прям там же был этот контроллер-функция, то можно было бы и явно

Vlad
16.08.2016
08:24:08
Интересно, что значение из контроллера в директиву нормально передается

(;¬_¬)
16.08.2016
08:24:13

Николай
16.08.2016
08:24:56
О, спасибо. А это я вам именно скидывал или вы просто с этого чата под шумок тоже посмотрели ? )

(;¬_¬)
16.08.2016
08:25:14

Николай
16.08.2016
08:25:19
аааа

(;¬_¬)
16.08.2016
08:25:25
и как бы самого ключевого там нет =)))

Google

(;¬_¬)
16.08.2016
08:25:27
?

Николай
16.08.2016
08:26:01
Пока я их делал, я дошел до мысли, что оно не актально. Пора бы забывать первый ангуляр. В итоге энтузиазм немного подупал ?
Кстати лайк поставили? )))))
ну или дизлайк
все должно быть честно

(;¬_¬)
16.08.2016
08:26:34
эм... ща гляну =) так не вспомню...я просто несколько дней созерцал не по одному разу =)

Николай
16.08.2016
08:26:52
Ну хоть чтото подчерпнули?

(;¬_¬)
16.08.2016
08:27:17
конечно =)
спасибо

Oleg
16.08.2016
12:52:05
Привет, вопрос:
Есть сервис, в нем функция получения объектов из базы
this.getItems = function() {
return $http.get('https:....');
};
Потом в контроллере приходится
ItemService.getItems().then((response) => {
this.items = response.data;
}).catch(() => {
});
А если контроллеров много то приходится так делать везде, можно ли как-то сделать так чтобы из сервиса возвращался уже готовый объект?
и вопрос 2 - как оформляется код в телеграмме)

(;¬_¬)
16.08.2016
12:54:10
=_=
однострочный одна ` в начале и в конце

Oleg
16.08.2016
12:56:04
Спасибо
Привет, вопрос:
Есть сервис, в нем функция получения объектов из базы
this.getItems = function() {
return $http.get('https:....');
};Потом в контроллере приходится
ItemService.getItems().then((response) => {
this.items = response.data;
}).catch(() => {
});А если контроллеров много то приходится так делать везде, можно ли как-то сделать так чтобы из сервиса возвращался уже готовый объект?

MVP
16.08.2016
18:05:37

Oleg
17.08.2016
07:48:12

Alex
17.08.2016
07:54:21
всё зависит от того, что вам конкретно нужно. если нужно в нескольких местах\несколько раз в контроллере дёргать метод получения данных - пихайте его в сервис и дёргайте. если нужно разово получить данные и что-то делать с ними в контроллере - лучше запихнуть в резолв стейта и инжектить в контроллер

MVP
17.08.2016
08:27:17

Google

MVP
17.08.2016
08:27:31
*ее

Oleg
17.08.2016
08:31:40
Несколько раз не выводятся, только получаются и потом в разных местах используются
Мне потом в разных компонентах нужен этот массив использовать и каждый раз приходится асинхронно вызывать и обновлять

Alex
17.08.2016
08:35:06
в сервисе во время вызова после получения можно записать ответ в переменную сервиса


Ilya
17.08.2016
09:53:20
Народ, никто не пытался организовать динамические страницы со своими контроллерами?
Встала задача, где нужно иметь возможность создавать страницы, которые являются описанием к элементу каталога, но эти страницы нужно верстать отдельно, с отдельным контроллером
Захламлять основную верстку не хочется, было бы круто все это пихать в отдельный файл ITEMNAME.html, в котором бы инициализировался контроллер
В принципе почти все получилось, но когда я инициализировал контроллер, ниже подключаю блок с ng-controller, тут и начинается веселье. Контроллер успешно был создан, но применить его на блок неполучается. Есть идеи?
Или может кто подскажет по-другому как-то реализовать
Каждая страница берется из папки, а загрузка страницы происходит посредством встраивания функции в роутере в templateUrl, где из ссылки генерируется имя файла и его соответсвенно загружает
Короче,
.when('/catalog/:element*', {
templateUrl : function(url_attrs){
console.log(url_attrs.element);
return path + '_catalog/' + url_attrs.element + '.html'
},
controller : 'elementController'
})
Нужно, чтобы имя контроллера тоже было динамическим
а лучше всего, грузилось из файла
Нашел resolve: resolveController(), но не уверен, что туда получится пихать разное имя файла-контроллера


MVP
17.08.2016
10:49:32
Нужно, чтобы имя контроллера тоже было динамическим
Интересная задача. Я бы попробовал выйти из под ui-router, сделать state с какимнить customTemplateController - как обертку и в нем разруливать подгрузку разных шаблонов и разных js - они станут его child scope и будут внутри него

Dreamerinnoise
17.08.2016
10:55:38
Делал подобное через uirouter+requirejs, стейты формировались из json файла

Ilya
17.08.2016
12:07:51
Все-таки решил сильно не выпендриваться, а просто JS файл тянуть файл через $http get и eval'ить его
Но вот в чем трабл, он почему-то не выполняет callback
Т.е. все получается, но функция успешного ответа не срабатывает вовсе
буд-то не существует её вообще
$http({
method: 'GET',
url: link_js
}).then(function(res){
console.log(res);
}, error => console.log(error));

Google

Ilya
17.08.2016
12:09:12
попробовал впилил ajax (jquery), все работает, но $http не принимает

Alex
17.08.2016
12:09:16
eval - это самый-самый последний способ что-либо сделать в JS

Ilya
17.08.2016
12:09:29
да я сам нехотя согласился на это
но пока нормальной и быстрой реализации, без переделки всего и вся не вижу
здесь по сути нужно только дать жизнь скрипту из файла, чтобы был доступ к контроллеру, а сделать это чистой реализацией angular дико трудно
это нужно каждый уголок an знать, чтобы такое запилить
Хорошо что можно в templateurl вставить функцию, которая принимает параметры ссылки ангуляра, иначе и здесь были бы траблы

Roman
17.08.2016
12:46:27
Вот что на stackoverflow пишут - http://stackoverflow.com/questions/27465289/angularamd-ui-router-dynamic-controller-name


Ilya
17.08.2016
13:37:33
Хм, вроде все прикольно, только смущает, что все пути должны быть обязательно заранее прописаны в main.js "paths"
Т.е. я могу только кидать require к якорю из paths, в котором настоящее имя файла
И полностью перепиливать продакшн приложение из-за одного раздела, не прикольно, тем более дедлайн через неделю)
Ладно, скрести на душе будет до конца моих дней о том, что я использовал eval, но теперь у меня другой трабл.
Можно ли как-то сделать редирект, если templateurl не нашел шаблон?
Т.е. перед тем, как перейти на страницу catalog/element_name проверить, существует ли он и если нет, редирект на 404
подключить $location в app.config не получится, попытался вынести оттуда кусочек .when() со всей архитектурой подгрузки шаблона, но все-равно выдает ошибку и ждет возвращения правильной ссылки на шаблон
Вот в этом самом месте
Короче,
.when('/catalog/:element*', {
templateUrl : function(url_attrs){
console.log(url_attrs.element);
return path + '_catalog/' + url_attrs.element + '.html'
},
controller : 'elementController'
})


Roman
17.08.2016
13:43:30
не понял про require

Ilya
17.08.2016
13:44:13
Там ведь всю структуру приложения придется перепиливать
Все переделывать на лад require'a

Google

Ilya
17.08.2016
13:44:38
из текущего стандартного route

Roman
17.08.2016
13:45:11
вынеси нахождение шаблона в отдельную функцию, можно вообщена ангуляр не завязывать, перед переходом заранее проверяй наличие шаблона, если нет, принимай другое решение, а если нашел, только тогда меня location
только надо будет написать свою директиву над ui-sref
да зачем тебе requirejs
делай как делал, там просто пример как налету ресольвить контроллер
и опять же зачем eval?

Ilya
17.08.2016
13:47:20
Да, только въехал что там творится, действительно

Roman
17.08.2016
13:47:27
var script_tag = document.createElement('script');
script_tag.type = 'text/javascript';
script_tag.text = 'alert("hello world")';
document.body.appendChild(script_tag);
Ты же можешь получить ajax содержимое файлов
и вставить их в страницу
без eval

Ilya
17.08.2016
13:48:04
Ан нет, мне нужно чтобы этот скрипт был контроллером этого шаблона