¿Cómo usar “ng-repeat” dentro de la plantilla de una directiva en Angular JS?

Soy nuevo en Angular JS y estoy tratando de crear una directiva personalizada que se utilizará de la siguiente manera:

Corrps. controlador será:

 $scope.cashAccountsColumns = [ {"field": "description", "title": "Description"}, {"field": "owner", "title":"Owner"}, {"field": "currentBalance", "title":"Current Balance" } ]; 

Y el código de la directiva es:

 return { restrict : 'EA', transclude : false, templateUrl : 'html/linkedlist.html', scope: { listcolumns: "@" }, link : function(scope, element, attrs) { } } 

la plantilla es:

 
{{column.title}}

Pero esto no está funcionando. No obtengo el valor de column.title en la pantalla, sino que demasiadas filas, como se detalla a continuación, se agregan a DOM:

  

Pasar un objeto entero con atributo no funcionará, debe usar el enlace de doble vía. Simplemente cambie el enlace de @ a = y modifique el HTML a continuación para que funcione:

cambios al código de la directiva :

 // ... scope: { listcolumns: "=" }, // ... 

cambios a la plantilla :

  

La respuesta de @ AjayBeniwal es correcta, pero siento que podría usar alguna explicación adicional.

Como señala la documentación de Angular (en la sección “Aislar el scope de una directiva”), la opción de scope es un objeto que contiene una propiedad para cada enlace de ámbito aislado. Lo usamos para separar (aislar) el scope dentro de una directiva del scope externo, y luego mapeamos el scope externo al scope interno de la directiva.

El nombre de cada propiedad del objeto de scope corresponde a las directivas que aíslan la propiedad del scope . En el ejemplo de la pregunta, la única propiedad del objeto de scope es listcolumns . Debido a esto, también debe haber un atributo correspondiente en el html que crea la directiva:

 

Sin embargo, no se requiere que el nombre de la propiedad de scope y el atributo de la directiva tengan el mismo nombre. Podemos mapear estos dos valores de esta manera:

 

 controller: function ($scope) { $scope.cashAccountsColumns = 'value'; }, scope: { moreDescriptiveName: "=shortName" }, 

Para casos donde el nombre del atributo es el mismo que el valor que desea vincular dentro del scope de la directiva, puede usar esta syntax abreviada:

 

 controller: function ($scope) { $scope.cashAccountsColumns = 'value'; }, scope: { myName: "=" }, 

Además, en este ejemplo, el valor del atributo de la directiva debe corresponder a una propiedad del scope externo de la directiva. Esto se debe a que = in =shortName usa la vinculación bidireccional de los atributos desde el ámbito externo al ámbito aislado, lo que obliga a que el valor del atributo de la directiva se evalúe como una expresión. Como esta respuesta señala eloquentmente, si en cambio queremos pasar una cadena literal, podemos usar @ en lugar de = , o rodear la propiedad de scope aislado de la directiva con comillas dobles e individuales:

 scope: { moreDescriptiveName: "@" }, 

O