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 не должна делать побочных эффектов, только возвращать что-то.


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