2013-07-26 13 views
6

ho il seguente codice:

app.directive('mySample', function($compile) { 
    return { 
     //template:"<input type='text' ng=model='sampleData'/> {{sampleData}} <br/>" 
     link: function(scope, element, atts, controller) { 
      var markup = "<input type='text' ng=model='sampleData'/> {{sampleData}} <br/>"; 
      angular.element(element).html($compile(markup)(scope)); 
      console.log($compile(markup)(scope)); 
     } 
    }; 
}); 

E mi aspetterei per generare un ingresso, un po 'di arco che è accoppiato con la portata e una pausa. Tuttavia ottengo questo output:

[[object HTMLInputElement], [object HTMLSpanElement], [object HTMLBRElement]]

Ho anche provato il modello, nel commento qui, separatamente e poi commentando la parte di collegamento. Ciò genera gli elementi input e break ma non l'estensione che mostra il modello coupled sampleData.

Ho un campione non funzionante a http://jsfiddle.net/KvdM/nwbsT/ che lo dimostra.

risposta

15

Prova questo:

element.html(markup); 
$compile(element.contents())(scope); 
+0

Esegue il rendering dell'input ma non il {{sampleData}} funziona. – XIII

+0

Come posso registrare il sampleData? – XIII

+3

{{sampleData}} non funziona perché hai scritto ng = modello invece di ng-model :) – AlwaysALearner

9

L'esecuzione della funzione restituita dal servizio $ compile fornisce elementi DOM anziché html. Quindi è necessario inserirli nella vostra pagina utilizzando accoda (o equivalente):

angular.element(element).append($compile(markup)(scope)); 
+0

Ciò dimostra già l'ingresso, ma non fa il {{}} sampleData lavoro. – XIII

+0

Come si sostituisce il contenuto dell'elemento? Questo si aggiunge piuttosto. –

+1

probabilmente cambia "aggiungi" a "replaceWith" (non l'ho provato) –

1

Forse il modo più semplice è quello di utilizzare un modello di hard-coded, piuttosto che ha generato una dinamica uno

<div ng-app="myApp"> 
    <my-sample sample-data="'test'"></my-sample> 
</div> 

var app = angular.module('myApp', []); 

app.directive('mySample', function ($compile) { 
    return { 
     restrict: 'E', 
     scope: { 
      sampleData: '=sampleData' 
     }, 
     template: "<input type='text'/> {{sampleData}} <br/>", 
    }; 
}); 

FIDDLE

+0

Restituisce l'input ma non il {{sampleData}} viene aggiornato. Continua a mostrare il test. – XIII

+0

Questi sono i dati trasmessi in HTML. – zsong

-1

Dipende wha il tipo di dati dovrebbe essere compilato, alcune volte Angular restituisce un tipo di nodo di commento.

Il nodo rilevante che vogliamo utilizzare è il next() (il suo primo fratello).

var tpl = '<div class="myWidget" ng-include="'templates/myWidget.html'"></div>; 
var _myWidget = $compile(tpl)(scope); 
var myWidget = null; 

scope.$on('$includeContentLoaded', function() { 
    myWidget = _myWidget.next(); 
}); 
-1

Hai solo bisogno di aggiungere il jquery di usare ".html" e fissato la denominazione di NG-modello

+0

Come intendi? Puoi fornire un jsfiddle o un campione di codice rilevante? – XIII

Problemi correlati