2015-08-04 2 views
0

Я новичок в угловом и не могу понять, как вызвать функцию-шаблон из шаблона. У меня есть некоторые возможности, которые будут повторно использоваться в приложении, и я решил бы, что я просто сделаю директиву со всей необходимой функцией, которая может быть легко доступна для разных модулей. Во время поиска ответов я наткнулся на этот пост: how-to-call-a-method-defined-in-an-angularjs-directive , который кажется хорошим решением. Однако я не могу понять, почему мой директивный метод showPolicy() не вызывается.Функция определения углового вызова из шаблона

// контроллер:

(function(){ 
'use strict'; 

angular.module('releaseAppsModule') 
.controller('releaseAppsController', releaseAppsController); 

releaseAppsController.$inject = ['$rootScope', 
'storageFactory', 
'releaseAppsFactory', 
'$modal', 
'$translate', 
'getIconFactory', 
'$scope', 
'$filter']; 

function releaseAppsController($rootScope, storageFactory, releaseAppsFactory, $modal, $translate, getIconFactory, $scope, $filter) { 

    var vm = this; 
    vm.policyControl = {}; 
    ... 

// Шаблон контроллера:

<tr ng-repeat="policyRelease in regionRelease.policyReleases | orderBy:vm.orderByField:vm.reverseSort" ng-if="policyRelease.status == 'NEW' || policyRelease.status == 'SCHEDULED'"> 
<td> 
<policy control="vm.policyControl" release-item="policyRelease" class="release-apps-app-btn app-release-data"></policy> 
</td> 

// директива:

(function(){ 
'use strict'; 

angular.module('myApp') 

.directive('policy', policy) 

    function policy() { 

     var directive = { 
      restrict: 'E', 
      link: link, 
      replace: true, 
      scope: { 
       releaseItem: '=', 
       control: '=' 
      }, 
      template: '<a ng-click="vm.policyControl.showPolicy({releaseItem: releaseItem});">{{ releaseItem.policy.name }}</a>' 
     }; 

     return directive; 

     function link(scope, el, attr) { 
      scope.internalControl = scope.control || {}; 
      scope.internalControl.showPolicy = function (releaseData) { 
       ... 
      } // showPolicy 

      scope.internalControl.showPolicyModal = function(response, releaseData) { 
       ... 
      } // showPolicyModal 

     } // link 

    } // policy 

})(); 

ответ

1

В шаблоне, вы пытаетесь вызвать vm.policyControl.showPolicy() который не определено в вашей текущей области действия, так как Angular пытается найти

[directiveScope].vm.policyControl.showPolicy() 

Вам необходимо изменить функцию ng-click к internalControl.showPolicy(), как ссылается на фактический объект, сфера применения Директивы имеет в наличии.

+0

Я думал, что пробовал это, и он не работал, но, похоже, сейчас, спасибо. – neridaj

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