Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Вопросы по ангуляру (https://javascript.ru/forum/offtopic/44039-voprosy-po-angulyaru.html)

cyber 03.01.2014 18:16

Вопросы по ангуляру
 
Щас ковыряю ангуляр, и думаю что текущий вопрос это не последний, поэтому создам отдельную тему, и буду тут спамить ангуляром.

что я делаю не так?
Почему не обрабатывается click ?
var static = angular.module("staticPage", []);

    static.directive("showPage", function () {
        return function ($scope, element) {
            element.bind("click", function () {
                console.log("click")

            });
        };
    });


<body ng-app="staticPage">

<div class="body"  ng-controller="MainCtrl">

        <div class="menu-wrap" >
            <ul class="menu" ng-repeat="item in menu">
                <li showPage> <a href="#{{item}}"> {{item}} </a> </li>
            </ul>
        </div>
<!-- .... -->


Нашел ошибку, не работает из за того что буква "P" в верхнем регистре , а атрибуты в нижнем регистре, toLowerCase - не не слышал...

nerv_ 03.01.2014 18:20

хватит срать в оффтоп http://javascript.ru/forum/angular/

Maxmaxmaximus6 03.01.2014 18:48

и вообще в линкинг функцию передается не $scope а scope

а вообще директивы пишутся с префиксами, ты должен писать

<li ng-showPage> <a href="#{{item}}"> {{item}} </a> </li>

cyber 03.01.2014 18:51

Maxmaxmaximus6, спс учту)

Maxmaxmaximus6 03.01.2014 18:56

а терь сравни ui версию)

ui.directive("showPage", function () {
    return function (scope, element) {
        element.on("click", function () {  console.log("click")  });
    };
});





<div controller="Main" class="menu-wrap" >
        <ul repeat="item in menu" class="menu">
            <li showPage>
                 <a href="#{item}">{item}</a>
             </li>
        </ul>
</div>

Maxmaxmaximus6 03.01.2014 19:00

А вообще правильнее и красивее писать (в ui) вот так:


<div controller="Main as main" class="menu-wrap" >
        <ul repeat="menuItem in main.menu" class="menu">
            <li showPage>
                 <a href="#{menuItem.hash}" bind="menuItem.text"></a>
             </li>
        </ul>
</div>




function Main (){

   menu = [
       {text: 'home page', hash: 'home'},
       {text: 'last news', hash: 'news'}
   ]

}

cyber 03.01.2014 19:00

Maxmaxmaximus6, норм, но мне не особо важен синтаксический сахар, это не конечно + , но главное что бы работало как мне нужно)

Maxmaxmaximus6 03.01.2014 19:03

Да и вообще если хочешь глобальные значения у меня запилить то не обязательно контроллер пилить)

ui.global{
   menu: [
       {text: 'home page', hash: 'home'},
       {text: 'last news', hash: 'news'}
   ]
}


ui это модуль от которого можно отнаследовать новые модули если хочешь

ui.module('name') создаст модуль, если такой модуль уже создан то вернет его =)

Цитата:

Сообщение от cyber
но мне не особо важен синтаксический сахар

а мне важен на 90% сахар, так как просто сделать ЧТОБЫ РАБОТАЛО и дурак может. =)

cyber 03.01.2014 19:05

Цитата:

Сообщение от Maxmaxmaximus6
А вообще правильнее и красивее писать (в ui) вот так:

я потом добавлю метод getHash и все
function getHash(elem) {
 return elem.hash || elem;
}


<li showPage>
   <a href="#{getHash(item)}" bind="item.text"></a> <!-- я еще не совсем разобрался в синтаксисе ангуляра но вроде так можно?! -->
</li>

Maxmaxmaximus6 03.01.2014 19:08

cyber,а вообще директиву шоу пейдж делать не надо, ты должен создать директиву сменьщика страниц и применить её к контейнеру страниц, и заставить её слушать изменения хэша) это к слову так.

типа

<ul>
    <li><a href='#home'>Главная</a></li>
    <li><a href='#news'>Новости</a></li>
</ul>


<ul pageContainer>
    <li page='home'>содержимое</li>
    <li page='news'>содержимое</li>
</ul>



pageContainer и page 2 взаимосвязанные директивы). Директива pageContainer слушает изменения хэша и показывает ту или иную директиву page в зависимости от значечния. но И ЭТО не правильный вариант, так как для этих целей в ангуляре есть роутер))

Цитата:

Сообщение от cyber
но вроде так можно?! -->

да, только функция getHash не должна делать побочных эффектов, только возвращать что-то.

cyber 03.01.2014 19:08

Цитата:

Сообщение от Maxmaxmaximus6
а мне важен на 90% сахар, так как просто сделать ЧТОБЫ РАБОТАЛО и дурак может. =)

для в приоритете скорость работы и отсутствие утечек памяти)
Вот запилишь видеокурс по своему ui, тогда и поговорим или хотя бы статью на хабре)

cyber 03.01.2014 19:10

Цитата:

Сообщение от Maxmaxmaximus6
cyber,а вообще директиву шоу пейдж делать не надо, ты должен создать директиву сменьщика страниц и применить её к контейнеру страниц, и заставить её слушать изменения хэша) это к слову так.

А как добавить сложную css анимацию ?

Maxmaxmaximus6 03.01.2014 19:12

Цитата:

Сообщение от cyber
А как добавить сложную css анимацию ?

есть сервис $animate но можно и так

<div class="page_show_{showPage}"></div>

<style>
    .page_show_true{
    
    }

    .page_show_false{
    
    }
</style>

cyber 03.01.2014 19:16

Maxmaxmaximus6, понял, спс буду ковырять.
П.с плюсовать не буду, так как заметил зависимость между ростом твоей кармы и появлением кучи ужасных картинок)

Maxmaxmaximus6 03.01.2014 19:51

Я могу очень резко поднять себе карму на 40 если захочу) не парься. Карма на этом форуме не дает привелегий)
вот если бы с отрицательной кармой нельзя было постить картинки)))))

cyber 03.01.2014 20:04

Цитата:

Сообщение от Maxmaxmaximus6
Я могу очень резко поднять себе карму на 40 если захочу) не парься. Карма на этом форуме не дает привелегий)
вот если бы с отрицательной кармой нельзя было постить картинки)))))

Да этого не хватает, а то твои картинки задолбали)

Maxmaxmaximus6 03.01.2014 20:43

По моему ты несешь хуиту) я пощу картинки в теме смешные картинки) Как тебя могут заебать картинки если ты заходишь в тему картинки? Не заходи в нё, в чем проблема то)? Где твоя логка парень)?

monolithed 03.01.2014 21:23

Перед тем как использовать Angular сто раз подумайте.

http://binarymuse.github.io/ngInfini...emo_basic.html
Ну и пример на главной с туду, попробуйте удерживать ентер, после 500-1000 пунктов Angular уводит вкладку в сон (Ractive после 1500, но там анимация!).


Лучше посмотрите в сторону Ractive

cyber 03.01.2014 21:45

что ты подразумеваешь под
Цитата:

Сообщение от monolithed
уводит вкладку в сон

2к элементов все работает.

cyber 03.01.2014 22:01

monolithed, и вообще я пока думаю о чем маленьком типо dot.js

cyber 03.01.2014 22:11

ангуляр вроде и крутая штука, но слишком громоздкая, да и тормозить в моем случае точно не будет.
Просто давно руки не доходили руки до ангуляра, поэтому просто пробую.

monolithed 03.01.2014 23:09

Цитата:

Сообщение от cyber
2к элементов все работает.

У меня после 500, у кого-то после 1000-1500.
Пример со скроллом тоже не тормозит?

cyber 03.01.2014 23:18

monolithed, если колесиком крутит то дошел до 3х потом просто надоело тормозов не было, жрало 40 000к оперативы (не более чем другие страницы).

monolithed 03.01.2014 23:23

Цитата:

Сообщение от cyber
если колесиком крутит то дошел до 3х

Ну это мало, обычно крутят больше

cyber 03.01.2014 23:25

Цитата:

Сообщение от monolithed
Ну это мало, обычно крутят больше

сколько?
щас скриптом прокручу)

cyber 03.01.2014 23:31

monolithed, что можешь посоветовать маленькое и быстрое (не dot.js) из клиентских шаблонизаторов, но с синтаксисом похожий на ангуляровский или ejs, потом что dot.js меня бесит)

monolithed 04.01.2014 00:07

Цитата:

Сообщение от cyber
что можешь посоветовать маленькое и быстрое

RactiveJS
Цитата:

Сообщение от cyber
ejs

Дерьмовенький темплейтер.

А вообще не нужно сравнивать платформы и темплейтеры.

Если data-binding не нужен, можешь попробовать fest + какой-нибудь в качестве препроцессора jade

cyber 04.01.2014 00:21

Цитата:

Сообщение от monolithed
RactiveJS

не могу найти его сравнение с ангуляром.
В чем преймущества?

monolithed 04.01.2014 00:29

Цитата:

Сообщение от cyber
не могу найти его сравнение с ангуляром.

Что ты хочешь сравнить?
Если скорость, то RactiveJS один из самых быстрых и простых фреймворков подобного класса.

Цитата:

Сообщение от cyber
В чем преймущества?

Скорость, вес, удобство, масштабирование приложения не зависит от архитектуры фреймворка.

Т.е. если в ангуляре нужно придерживаться их уродской архитектуры, то RactiveJS работает вокруг твоей архитектуры.
Например, если ты привык использовать RequireJS, а не DI, то нет ничего проще чем использовать плагин к RactiveJS

cyber 04.01.2014 00:30

monolithed, спасибо буду ковырять.

рони 04.01.2014 00:38

monolithed,
http://binarymuse.github.io/ngInfini...emo_basic.html

Google Chrome начал тормозить после 500
Mozilla Firefox после 1000
Internet Explorer 11 после 4500 начал чуть притормаживать

monolithed 04.01.2014 00:48

Цитата:

Сообщение от рони
Google Chrome начал тормозить после 500

Ага, тоже самое.

nerv_ 04.01.2014 01:14

Цитата:

Сообщение от monolithed
Перед тем как использовать Angular сто раз подумайте.

http://binarymuse.github.io/ngInfini...emo_basic.html
Ну и пример на главной с туду, попробуйте удерживать ентер, после 500-1000 пунктов Angular уводит вкладку в сон (Ractive после 1500, но там анимация!).

кривые руки никто не отменял. К тому же на странице плагина, на кот. ссылка, косвенно написано о возможных проблемах производительности.

Цитата:

Сообщение от cyber
не могу найти его сравнение с ангуляром.
В чем преймущества?

аналогичный вопрос

Цитата:

Сообщение от monolithed
Т.е. если в ангуляре нужно придерживаться их уродской архитектуры

обоснуй. Почему архитектура "уродская"?

https://github.com/RactiveJS/Ractive...0-second-setup
очень на проект Финома похоже https://github.com/RactiveJS/Ractive...0-second-setup или проект Финома на него http://javascript.ru/forum/project/4...reshka-js.html

monolithed 04.01.2014 13:20

Цитата:

Сообщение от nerv_
кривые руки никто не отменял.

Согласен что плагин говенный, но и разработчики ангуляра не рекомендуют использовать ангуляр с более чем 2 k биндингами (очень мало).

Цитата:

Сообщение от nerv_
аналогичный вопрос

Я уже написал. Проще самим сравнить.

Цитата:

Сообщение от nerv_
обоснуй. Почему архитектура "уродская"?

Разве это не очевидно?
Попробуй написать нормальное приложение на ангуляре вокруг своей архитектуры или хотя бы расширить уже существующую написанную с использованием ангуляра.

Да и вообще вы много знаете ентерпрайз-проектов на ангуляре?

nerv_ 04.01.2014 14:14

Цитата:

Сообщение от monolithed
разработчики ангуляра не рекомендуют использовать ангуляр с более чем 2 k биндингами (очень мало).

Зачем тебе одновременно 2k биндингов на одной странице? :)

Цитата:

Сообщение от monolithed
Я уже написал. Проще самим сравнить.

сравнивать можно только в том случае, если хорошо знаешь оба фреймворка. А если не знаешь оба или знаешь плохо, разве может идти речь об объективном сравнении?

Цитата:

Сообщение от monolithed
Разве это не очевидно?
Попробуй написать нормальное приложение на ангуляре вокруг своей архитектуры или хотя бы расширить уже существующую написанную с использованием ангуляра.

Я написал порядка 5-и приложений/проектов на ангуляре, не считая плагинов/модулей и прочей мелочевки к нему же.
Можно "отдать главенство" ангуляру и использовать его каркас (в т.ч. ng-app), либо внедрять "модули" в уже существующее приложение, коих может быть бесчисленное множество.

monolithed 04.01.2014 14:32

Цитата:

Сообщение от nerv_
Зачем тебе одновременно 2k биндингов на одной странице?

Сейчас эра single-page приложений.

Чтобы тебе было проще понять, что такое 2k, это список просмотра картинок в поиске гугла (300 элементов) * несколько прокруток + фильтры.

Если для перехода на следующую страницу нужно ее перезагрузить, то такой инструмент не нужен.
Тем не менее ангулар можно приготовить работать и с большим количеством связок, но эта работа будет похожа на подготовку gcc к advanced mode

nerv_ 04.01.2014 15:17

Цитата:

Сообщение от monolithed
Сейчас эра single-page приложений.

тут вопросов нет :D

Цитата:

Сообщение от monolithed
Чтобы тебе было проще понять, что такое 2k, это список просмотра картинок в поиске гугла (300 элементов) * несколько прокруток + фильтры.

а еще по той ссылке создатель ангуляра пишет:
Цитата:

So the real question is this: How many comparisons can you do on a browser in 50 ms? This is a hard question to answer as many factors come into play, but here is a test case: http://jsperf.com/angularjs-digest/6 which creates 10,000 watchers. On a modern browser this takes just under 6ms. On an on ie8 it takes about 40ms. As you can see this is not an issue even on slow browsers these days.
Попробую внести ясность. Привязок/биндингов может быть сколько угодно. Решают:
1. вес биндингов
2. частота срабатывания
3. кол-во биндингов, кот. срабатывает в единицу времени
4. ...
Поэтому, если в единицу времени мы обновляем все приложение, вероятно, мы делаем что-то не правильно.

Чтобы было наглядней:
root: {
    scope: {
        scope: {} // если надо обновить только этот кусок, зачем перерисовывать/пересчитывать все приложение?
    },
    scope: {},
}

Maxmaxmaximus6 04.01.2014 17:44

Цитата:

Сообщение от nerv_
зачем перерисовывать/пересчитывать все приложение?

Мой скоуп пересчитывает только ватчеры которые явно могли измениться


Часовой пояс GMT +3, время: 09:45.