2014-01-23 4 views
0

Кто-то знает, почему, если я «drawStock =" drawStock»какAngularjs - атрибут равно значению

<tr ng-repeat="icl in ic.internal_consumption_lines" drawStock="drawStock(locator_id, product_id)" ...></tr> 

И тогда в моем сценарии

scope: { 
... 
drawStock: "&", 
... 
}, 
template:{ 
... 
<span>{{drawStock({locator_id:ic.internal_consumption_lines[index].transaction.locator.id, product_id:ic.internal_consumption_lines[index].transaction.product.id})}}</span> 
... 
... 
$scope.drawStock = (lid, pid) -> 
for i of $scope.product_stocks 
    if $scope.product_stocks[i].locator_id == lid 
    if $scope.product_stocks[i].product_id == pid 
     return $scope.product_stocks[i].stock 

Функция drawStock не отображать но если я изменю атрибут для другого имени, чем значение, скажем, что-то вроде «drawstock =» drawStock (... «он работает ...:

<tr ng-repeat="icl in ic.internal_consumption_lines" drawstock="drawStock(locator_id, product_id)" ...></tr> 

И тогда в моем сценарии

scope: { 
... 
drawstock: "&", 
... 
}, 
template:{ 
... 
<span>{{drawstock({locator_id:ic.internal_consumption_lines[index].transaction.locator.id, product_id:ic.internal_consumption_lines[index].transaction.product.id})}}</span> 
... 
... 
$scope.drawStock = (lid, pid) -> 
for i of $scope.product_stocks 
    if $scope.product_stocks[i].locator_id == lid 
    if $scope.product_stocks[i].product_id == pid 
     return $scope.product_stocks[i].stock 
+0

В чем разница между верхним фрагментом и нижним фрагментом? Они кажутся мне идентичными ... – gkalpak

+0

drawStock = "drawStock vs drawstock =" drawStock, посмотрите в верхнем регистре "S", что делает разницу между атрибутом и значением. – tomascharad

ответ

2

Согласно the docs:

Угловая нормализует тег элемента и имя атрибута, чтобы определить, какие элементы спичка директивы. Обычно мы ссылаемся на директивы по их регистрозависимому camelCaseс нормированным именем (например, ngModel). Однако, поскольку HTML нечувствителен к регистру, мы ссылаемся на директивы в DOM по строчным формам, обычно используя атрибуты dash-delimited для элементов DOM (например, ng-model).

нормализации процесс выглядит следующим образом:

  1. Газ x- и data- от передней части элемента/атрибутов.
  2. Преобразование :, -, или _ -ограниченное имя на camelCase.

В вашем случае, когда Угловая видит drawStock: "&" он понимает это как drawStock: "&drawStock", который уводит его в ищет draw-stock в вашем HTML.
И поскольку в вашем HTML draw-stock (но только drawStock) нет, это не сработает!

Если вы хотите использовать форму camelCase в своем HTML (например, потому что вы считаете ее более читаемой), и поскольку HTML нечувствителен к регистру, вы должны либо (1) явно указать имя атрибута, либо (2) использовать строчные буквы в ваша директива. Например:

HTML: <tr ... drawStock="..."> // (this is camelCase)

Директива (1): scope: { drawStock: '&drawstock' } // (1st camelCase, 2nd lowercase) Директива (2): scope: { drawstock: '&' } // (this is lowercase)
(обе директивы выше, относятся к "camelCased" атрибут HTML)

+0

Спасибо ExpertSystem! – tomascharad

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