@angular_js

Страница 38 из 325
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
потому что он обьевляет его через .controller
о, кстати, Николай =) посмотрел я ваши видео. и скажу, что обрываются на самом интересном

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

Николай
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
и вопрос 2 - как оформляется код в телеграмме)
многострочный - ``` в начале и в конце

=_=

однострочный одна ` в начале и в конце

Oleg
16.08.2016
12:56:04
Спасибо

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

Oleg
17.08.2016
07:48:12
Если используете ui-router то можно в 'resolve' делать полчение асинхронных данных перед загрузкой контроллера
Как вариант еще можно в абстрактной вьюхе прогружать, но все равно решение какое-то некрасивое(

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
Ан нет, мне нужно чтобы этот скрипт был контроллером этого шаблона

Страница 38 из 325