2016-03-27 2 views
0

Директива шаблона (items.html)функция контроллера не вызывается из шаблона директивы в AngularJS

<li ng-repeat="item in itemCart"> 
    {{item.title}} <br> 
    {{item.category}} &nbsp 
    {{ formatCurrencyFunction({cost: item.price}) }} 
</li> 

Этот обычай директива используется в Second.html

<h1> 
    This is Second. 
    {{header}} 

</h1> 
<hr> 
<ul> 
    <items-list item-cart="items" format-currency-function="formatPrice(cost)"></items-list> 
</ul> 

Код для контроллера является:

Функция formatPrice не вызывается из директивы Items.html

Что нужно исправить в моем коде, чтобы заставить его работать?

+0

Любая причина, по которой функция formatPrice должна существовать в контроллере? Могли бы вы перенести его в директиву? –

+0

Hi Tah Tatsumoto .. Я изучал, как заставить приложение работать, передав область действия от родительской директивы для детей. Да, это сработает так, как вы предлагаете использовать эту функцию. Но мне нужно понять, почему это подход не работает. – Navaneeth

ответ

0

Внутри функции связочной директивы, вы хотите, чтобы вызвать метод следующим образом:

scope.someFn({arg: someValue}); 

myApp.directive("itemsList", function(){ 
return{ 
    templateUrl:"contents/Views/Directives/Items.html", 
    replace: true, 
    scope:{ 
     itemCart: "=", 
     formatCurrencyFunction: "&formatCurrencyFunction" 
    }, 
    link:function(scope, element, attrs){ 
     scope.formatPrice({arg: 35}); //scope.someFn({arg: 35}); 
    }, 
    restrict:"EACM" // E-Element A-Attribute C-Class M-Comments   
} 

})

0

получил эту работу, используя нг-повтора на странице Second.html вместо директивы.

шаблон Directive (items.html)

<li> 
    {{item.title}} <br> 
    {{item.category}} &nbsp 
    {{ formatCurrencyFunction({cost: item.price}) }} 
</li> 

Этот обычай директива используется в Second.html

<h1> 
    This is Second. 
    {{header}} 

</h1> 
<hr> 
<ul> 
    <items-list item="item" format-currency-function="formatPrice(cost)" ng-repeat="item in items"></items-list> 
</ul> 

код в JS файл

myApp.directive("itemsList", function(){ 
    return{ 
     templateUrl:"contents/Views/Directives/Items.html", 
     replace: true, 
     scope:{ 
      item: "=", 
      formatCurrencyFunction: "&" 
     }, 
     restrict:"EACM" // E-Element A-Attribute C-Class M-Comments   
    } 
}) 
0

Внутри функции связочной директивы , вам нужно вызвать метод, применив какое-то событие к этому атрибуту

0

Формат функции контроллераCurrencyFunction() не может быть вызван, просто поместив его в выражение.

Чтобы использовать функцию, необходимую для ее вызова на основе четного, в вашем случае ng-init будет работать.

<li ng-repeat="item in itemCart" ng-init="formatCurrencyFunction({cost: item.price})"> 
{{item.title}} <br> 
{{item.category}} 
</li> 
Смежные вопросы