2016-12-21 2 views
2

Я хочу реализовать директивы в своем приложении, но я не могу даже начать с самого простого. Может кто-нибудь сказать мне, почему?Директива, показывающая пустую вкладку

JS:

angular 
     .module('app.admin.catalog.nutritional_facts') 
     .directive('nutritionalInfo', nutritionalInfo); 

function nutritionalInfo(){ 

    return{ 
     restrict: 'E', 
     scope: { 
      quantity: '=', 
      unit: '=' 
     }, 
     template: "<div> Hello world {{ '{{quantity.qty}} {{unit.u}}' }}</div>" 
    }; 
} 

HTML:

<nutritional-info quantity="{qty:4}" unit="{u:'g'}"></nutritional-info> 

Я несколько новых для Угловое, так это, вероятно, самый простой вопрос когда-либо. Он показывает только пустую метку, она даже не показывает мир Hello. Я уже пытался отправлять ints, строки и объекты в качестве атрибутов.

+2

Ну, чтобы начать с вами объявляем 'NutritionalInfo' с капиталом' n', который должен быть 'nutritionalInfo' – Jax

+0

Во-вторых, ваш синтаксис объекта является неправильным. 'quantity =" {qty: 4} "' будет правильным способом передать объект этому атрибуту –

+0

Спасибо за ваш ответ! Действительно глупые ошибки от меня, но исправлены и то и другое не работает – Sslink

ответ

4

я исправил свой код, как показано ниже, чтобы получить вашу директиву работает, как ожидалось: Working Fiddle

Мои изменения:

  1. Исправлено имя директивы для ГорбатыйРегистр
  2. Исправленный угловое binding в html
  3. Исправлен синтаксис объектов, которые передаются в директиву.

HTML:

<nutritional-info quantity="{qty:4}" unit="{u:'g'}"></nutritional-info> 

Контроллер:

angular.module('app.admin.catalog.nutritional_facts', []) 
    .directive('nutritionalInfo', nutritionalInfo); 

function nutritionalInfo(){ 

return{ 
    restrict: 'E', 
    scope: { 
     quantity: '=', 
     unit: '=' 
    }, 
    template: "<div> Hello world {{quantity.qty}} {{unit.u}}</div>" 
}; 
} 
+0

Модуль объявлен в другом .js, а также приложение ng-app. Оба js реализованы в HTML. спасибо за Ваш ответ! – Sslink

+0

Я отклонил вас, потому что вы поощряете копирование кода вместо того, чтобы объяснять *, что * вы изменили.Если вы измените это, я отредактирую DV. –

+0

@DanPantry Извините, что я добавил сначала код, а затем начал добавлять изменения, которые я сделал. – superUser

3

У вас есть несколько вопросов:

  • NutritionalInfo должен быть nutritionalInfo (camelCase). Вот как Angular будет знать, чтобы связать эту директиву с тегом HTML <nutritional-info>. См. Directive Normalization.
  • Вы не правильно передаете объекты в директиве. quantity="{qty=4}" должно быть quantity="{qty: 4}".
  • Вы не правильно оцениваете выражение в шаблоне. {{ '{{quantity.qty}} {{unit.u}}' }} может просто быть {{quantity.q}} {{unit.u}}. Angular expressions интерпретируются как код JavaScript, выполняемый в текущей области. Таким образом, вы можете даже строить выражения типа {{quantity.q.toFixed(1) + ' ' + unit.u.toUpperCase()}} (в результате получается 4.0 G).

Со всеми этими исправлениями, вот working fiddle.

0

Вот мое полное решение:

<!doctype html> 
<html lang="en" ng-app="app.admin.catalog.nutritional_facts"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Document</title> 

</head> 
<body > 

<nutritional-info quantity="{qty: 3}" unit="{u: 'g'}"></nutritional-info> 

<script 
     src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular.js"> 
</script> 

<script> 

    function nutritionalInfo(){ 
     return { 
      restrict: 'E', 
      scope: { 
       quantity: '=', 
       unit: '=' 
      }, 
      template: "<div> Hello world '{{quantity.qty}} {{unit.u}}'</div>" 
     }; 
    } 

    angular 
      .module('app.admin.catalog.nutritional_facts', []) 
      .directive('nutritionalInfo', nutritionalInfo); 


</script> 
</body> 
</html> 
Смежные вопросы