2013-08-28 17 views
9

Yalıtılmış bir kapsam kullanıyorum, bir öznitelik üzerinde bir değişken geçirebilirim. üzerindeDeğişkenleri bir devralınan (değil yalıtılmış) kapsamı olan bir yönergeye geçiren angularjs

Sonra
<my-directive baz='foo.bar'> 

yani

, yönerge en JavaScript

.directive('myDirective', function() { 
    return { 
    scope: { 
     'baz': '=' 
    } 
    } 
}); 

Kalıtsal kapsamı ile benzer bir şey yapmak için herhangi bir yolu var mı? Bağlantı işlevi sadece dizeleri geçer.

Şu anda, değişkeni kendim ayrıştırarak ve kapsam ile eşleştiriyorum. $ Parent. Yardımcı bir işlev olmalı ya da bunu yapmanın daha kolay bir yolu olmalı.

+0

Ebeveyn kapsamına direktif kodundan erişmek mi istiyorsunuz? –

cevap

14

kullanın $eval veya $parse: Eğer yönergede kapsam nesnesi beyan etmezseniz

<my-directive baz='foo.bar'> 

.directive('myDirective', function($parse) { 
    return { 
    scope: true, 
    link: function(scope, element, attrs) { 
     console.log(scope.$eval(attrs.baz)); 
     var model = $parse(attrs.baz); 
     console.log(model(scope)); 
     // if you want to modify the value, use the model, not $eval: 
     model.assign(scope, "new value"); 
    } 
    } 
}); 
+0

$ parse hakkında bir şey bilmiyordum. Bunu yapmanın iyi bir yolu. – BoxerBucks

0

, hiçbir izole kapsamı kurulum olacak ve size erişim alacak DOM'de div'in bildirildiği alandan geçirilen kapsam. Böyle

şey: Yani

.directive('myDirective', function() { 
    return { 
    function(scope, element, attrs){ 
     //scope here = the inherited scope from the DOM 
    } 
} 

Eğer yönergesi DIV etiketi ilan varsa, aslında bir nitelik olarak değer göndermek gerekmez - sadece dışarı indirebiliriz kapsamı. Bu kod ile

3

:

link: function(scope, elem, attrs) {} 

tüm atributes bu yönerge atamak almak için

attrs 

eleman kullanabilirsiniz.

daha sonra, herhangi bir kapsam için attrs atayabilir ve e.x templaınızda kullanabilirsiniz.

scope.someValue = attrs.attrName; 

Özetle:

Yönergesi:

link: function(scope, elem, attrs) { 
     scope.someValue = attrs.attrName; 
    } 

Yönerge şablonu:

<div> {{someValue}} <div> 

Yönergesi çağrı

<my-directive attrName="foo"> </my-directive> 
+0

bu sadece dizelerle ve belki de boolelarla çalışacaktır, nesneler değil, muhtemelen problem yaratacaktır. – Millenjo

İlgili konular