Как получить и установить значение атрибута для HTML-тега, используя AngularJS?

Я пытаюсь найти лучший способ получить и установить значение для атрибута в теге HTML, используя AngularJS. Пример:

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>My WebSite</title>
</head>
<body>
    <h1>Title</h1>

    <p>Praragraph1</p>

    <p data-mycustomattr="1234567890">Paragraph 2</p>

    <p>Paragraph 3</p>

    <footer>Footer</footer>
</body>
</html>

Затем, когда я вызываю url '/home', я хотел бы получить значение из data-mycustomattr (что я буду использовать для другого вычисления), а затем заменить его на "1",

и если url является "/category", я хотел бы получить значение из data-mycustomattr и заменить его на "2".

С jQuery это действительно просто:

$("#myPselector").attr('data-mycustomattr');

или

$("#myPselector").attr('data-mycustomattr','newValue');

Я использовал этот код jQuery, помещая его в мои контроллеры, и он работает нормально. Но, насколько я понимаю, это может быть плохой практикой.

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

Как вы думаете? У вас есть лучшее решение для получения и установки значений атрибутов?

ОТВЕТ на основе ответа Джонатана:

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>My WebSite</title>
</head>
<body>
    <h1>Title</h1>

    <p>Praragraph1</p>

    <p data-mycustomattr="{{mycustomattr}}">Paragraph 2</p>

    <p>Paragraph 3</p>

    <footer>Footer</footer>
</body>
</html>

Затем в контроллеры я вставил:

$scope.mycustomattr = '1';

И для чтения:

if ($scope.mycustomattr == '1'){
    // code
}

Протестировано и работает нормально.

Ответы

Ответ 1

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

 var mediaApp = angular.module('mediaApp',[]);

 mediaApp.config(['$routeProvider', function($routeProvider) {
      $routeProvider.when('/video', {templateUrl: 'video.html',   controller: 'VideoCtrl'});
      $routeProvider.when('/audio', {templateUrl: 'audio.html',   controller: 'AudioCtrl'});
 }]);

 mediaApp.controller('VideoCtrl',function($scope){
      $scope.customAttributeValue = "1";

 });

 mediaApp.controller('AudioCtrl',function($scope){
     $scope.customAttributeValue = "2";
 });

Затем в вашем представлении шаблоны просто привязывают атрибут.

 <h2>Videos</h2>
 <div data-customattr="{{customAttributeValue}}">
 </div>

И аудио-шаблон...

 <h2>Audio</h2>
 <div data-customattr="{{customAttributeValue}}">
 </div>

При навигации по маршруту/видео data-customattr будет иметь значение 1, когда переход к маршруту/аудио data-customattr будет иметь значение 2.