2015-07-16 2 views
0

Редактировать: Все пошли на всевозможные касательные, но остается вопрос - как получить атрибут элемента html внутри углового контроллера?Как получить атрибуты Html Element в AngularJS?

Вот plnkr попытка: http://plnkr.co/edit/0VMeFAMEnc0XeQWJiLHm?p=preview

//$scope.myElem = angular.element('testDiv'); //this breaks angular 
    $scope.myElem = $document.find('testDiv'); //this doesn't break angular, but unclear what it returns 
    $scope.myAttr = $scope.myElem.name; //this returns nothing 

Если вам нужно убедительно, что это на самом деле нужно - мне нужно найти, когда пользователь прокручивает через DIV, как показано здесь: http://jsfiddle.net/rs3prkfm/ Обратите внимание, что это имеет не имеет ничего общего с вопросом, просто сценарий. Вопрос прост: как получить значение атрибута?

Ссылки:
Бесполезные Официальные документы: https://docs.angularjs.org/api/ng/function/angular.element
Единственная полезная ссылка, которая до сих пор не работает: http://mlen.io/angular-js/get-element-by-id.html

+0

вы должны написать директиву и/или использовать 'ng-model' для привязки к модели. –

+0

Я не понимаю, как директива имеет отношение вообще. Не груб, просто на самом деле. Ng-model получит мне ценность, правда, мне нужно изменить свой вопрос. Действительно ищет атрибуты, например element.clientHeight. – VSO

+0

Директива позволит вам общаться с чем угодно. –

ответ

1

Вы можете использовать элемент API https://docs.angularjs.org/api/ng/function/angular.element

Там должно быть лишь несколько случаев, когда вы действительно должны были бы это, хотя.

+0

Danke schon, aber diese link ist in die Frage. – VSO

+0

Также, к сожалению, это не работает - plunk добавлен в исходное сообщение. – VSO

+0

Это работает очень хорошо. С кодом возникла пара проблем. Во-первых, элементы HTML имели неправильный синтаксис. Во-вторых, угловое приложение никогда не запускалось. И элемент api должен получить объект dom. См. Отредактированный plunkr: http://plnkr.co/edit/zqHMqqiv1rfZk7F1sqbL - надеюсь, что это поможет вам двигаться вперед –

1

Вы должны манипулировать DOM с помощью директив. Контроллер должен только манипулировать данными приложения и предлагать его в html.

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

Прочитайте это:

http://ng-learn.org/2014/01/Dom-Manipulations/

Надеется, что это помогает.

1

Использование angular.element:

var myElem = angular.element("#testDiv"); // here you get your div 
var myAttr = myElem.attr("name"); // you get: "testDiv" 

Помните, что вы есть ограничения, используя jqlite. Если вы хотите получить полную функциональность элемента jquery, импортируйте полный «jquery.js» перед импортом своего углового скрипта.

Однако, чтобы управлять DOM, вы ДОЛЖНЫ использовать директивы, как указано в большинстве ответов.

+0

Я тестирую сейчас, буду принимать ответ один раз. Однако выбор атрибута dom не считается манипуляцией? Или это? Мне просто нужно это проверить. Если он соответствует x, я запускаю функцию, которая не имеет ничего общего с dom. – VSO

+0

Хорошо, но почему бы не использовать что-то вроде 'ng-click =" doSomething ("ofThisKind") "для этого? Затем в вашем контроллере ваша функция doSomething будет действовать в соответствии с ее параметром. – Cyberdelphos

+0

http://jsfiddle.net/rs3prkfm/ Нужно отключить что-то, когда пользователь прокручивает дно div. – VSO

Смежные вопросы