2016-09-09 23 views
10

Özel yönerge şablonumda otomatik artış numarasına ilişkin bir sorunum var. İhtiyacım olan işlevsellik, düğme tıklaması üzerine dinamik HTML içeriği eklemektir.Özel yönergede otomatik artış değeri

main.html
<div class="addTemplateContainer{{dataPoint.id}}"></div> <div ant-add-template-button parent="addTemplateContainer{{dataPoint.id}}"></div>

Direktifi - ant-eklentisi şablon button.js

app.directive('antAddTemplateButton', function ($compile) { 
return { 
    restrict: 'A', 
    link: function (scope, element, attrs) { 
     $(element).on('click', function() { 
      var compiledeHTML = $compile('<div ant-add-template></div>')(scope); 
      $('div.' + attrs.parent).append(compiledeHTML); 
     }); 
    } 
}}); 

Direktifi - ant-eklentisi template.js

app.directive('antAddTemplate', function() { 
return { 
    restrict: 'A', 
    link: function (scope, element, attrs) { 

    }, 
    templateUrl: '../html/relation-join.html' 
}}]); 

Template - my-template.html

<select ng-model="joins[$i]" ng-change="myFunc($i)"></select> 

Yukarıdaki kod, HTML içeriği eklemek için iyi çalışıyor ancak select & için kullanılan ng-modelim için diziyi kullanmam gerekiyor; bu nedenle, her değişiklik olayında işlevi çağırmam gereken bazı işlevler var. Düğmeyi tıklattığımda her defasında bir artış değeri olarak $ i almanın bir yolunu bulamıyorum.
Ng-modelleri, birleştirmeler [0], birleştirmeler [1], birleştirmeler [2] vb. Daha spesifik olarak, burada izole kapsamı kullanmak istemiyorum.

Herhangi bir yardım için teşekkür ederiz. Ben bunu derlenmiş önce şablonu işlemek amacıyla antAddTemplate arasında compile işlevi uygulamak gerekir inanıyoruz Bu deneyebilirsiniz

+1

Oldukça sen ne işe yarar durumda anlamıyorum Çözmeyi denemekle birlikte, bu girişimli çözüm son derece sarsılmış görünüyor. Bileşenleri dinamik olarak eklemeniz gerekirse, tek ihtiyacınız olan 'ng-repeat' ve tekrarlanan verilere bir öğe eklemek için bir miktar tetikleme. – RIAstar

+0

@RIAstar Aynı işi bitirdim ama benim için daha yönetilebilir olan direktiflerle çalışmayı bekledim. Teşekkürler...! $ window link fonksiyonu için bile çalıştı ama şablon için çalışmadı. – ba1ar

cevap

-1

, ng tıklama önce tetiklenir ve daha sonra ng değişim

1

kovulacak.

app.directive('antAddTemplate', function() { 
return { 
    restrict: 'A', 
    compile: function(element, attrs) { 
     // dynamically set the ng-model attribute by using the index supplied 
     element.find('select') 
      .attr('ngModel', 'joins['+attrs.index+']') 
      .attr('ngChange', 'myFunc('+attrs.index+')'); 

     // return the link function (the function that would be declared with link: property when compile: is not being used) 
     return function linkFunction (scope, element, attrs) { 

     }; 
    }, 
    templateUrl: '../html/relation-join.html' 
}}]); 

Şimdi ant-add-template için endeksini geçmesi, böylece yapmak ant-add-button güncellemeniz gerekir:

şey gibi

app.directive('antAddTemplateButton', function ($compile) { 
return { 
    restrict: 'A', 
    link: function (scope, element, attrs) { 
     $(element).on('click', function() { 
      // add a new index to the joins array 
      var index = scope.joins.push() - 1; 

      // compile ant-add-template with an index attribute 
      var compiledeHTML = $compile('<div ant-add-template index="'+index+'"></div>')(scope); 
      $('div.' + attrs.parent).append(compiledeHTML); 
     }); 
    } 
}}); 
+0

Yukarıdakileri henüz denemedim ama çalıştıklarımda neredeyse aynı şeyi yaptım ama dikkatimi çekmek istediğim şablon html sayfamdaki ng-change işlevim için bu diziye ihtiyacım var. – ba1ar

+0

Tamam, güncellenmişim Ayrıca cevap, 'ngChange' özniteliğini dizinle de ayarlıyor. İhtiyacın olan başka bir yer var mı? – plong0

+0

Hayır, sadece bir kez – ba1ar

İlgili konular