2012-10-02 17 views
13

Özelliklerin sayısının, seçili nesnelere bağlı olarak değişebileceği özellikler bölmesi oluşturmak istiyorum. o,AngularJS yönergesinde belirtilen dize türleri

<div ng-app="MyApp"> 
    <div class="properties-pane" ng-controller="PropertiesPane"> 
    <div ng-repeat="property in properties"> 
     <property name="{{property.name}}" value="{{property.value}}"> 
    </div> 
    </div> 
</div> 

Basit değildir:

Böyle kodu kullanarak, adını ve bir özelliğin değeri görüntüler property denilen kendi direktifi ile yarattık? Bu, property.value bir dize (DOM öğesinde bir öznitelik olarak) dönüştürülecek dışında, yalnızca iyi çalışır. Özellik değeri başka bir veri türü ise ne yapmalıyım? Örneğin bir nesne. (CoffeeScript cinsinden) uygulanması kalan kısmına bakın:

Birincisi,
İkinci: value.x olarak

MyApp = angular.module('MyApp', []) 

MyApp.controller 'PropertiesPane', ($scope) -> 
    $scope.properties = [ 
    # Note that value is an object, not a string: 
    {name: 'First', value: {x:0, y:0, z:42}}, 
    {name: 'Second', value: {x:0, y:20, z:0}}, 
    {name: 'Third', value: {x:1, y:1, z:1}}, 
    ] 

MyApp.directive 'property', ($compile) -> 
    restrict: 'E' 
    transclude: false 
    replace: true 
    scope: {name: '@name', value: '@value'} 
    template: '<div>{{name}} {{value.x}}, {{value.y}}, {{value.z}}</div>' 
    #       ^^^^^^^  ^^^^^^^  ^^^^^^^ 
    # this doesn't work as value is a string, not an object 

, y ve z bir ipe tanımsız olan, sonuç elbette
Üçüncüsü,

istediğim çıkışı:

İlk 0, 0, 42
İkinci 0, 20, 0 Üçüncü 1, 1, 1

Öğeleri programsal olarak nasıl ekleyeceğimi düşünmemde temel olarak yanlış bir şey olduğundan şüpheleniyorum. Böyle bir şeyi uygulamak için Açgözlü yolu nedir?

DÜZENLEME: Çözüm

, referans olarak yerine bir dize değeri olarak bir nesne olarak value bakın direktifi = yerine @ kullanın:

scope: {name: '@', value: '='} 

Ve şablonda:

<property name="{{property.name}}" value="property.value"> 

{{}}.

cevap

11

name='property.name' ve scope: { name: '=', value: '=' } nedir?

Bu sihir yapmalı.

this bkz daha fazla bilgi edinmek ve için (+ f ctrl) aramak için '@', ilk sonuç ne istediğiniz;)

+0

teşekkür ederiz! Bu yaptı! –

+9

Bu, bazen istenmeyen bir etki olan bu yönerge için yalıtılmış bir alan oluşturur. – Uri

+0

Ne demek düşünüyorum: kapsamını: {isim: '@', değer: '= adı'} Bu 'değerin' karma –