2013-03-15 11 views
12

Mam dyrektywę, która tworzy pole wejściowe. Należy ustawić atrybut ng-model tego pola wejściowego na wartość zmiennej $ rootScope . Powodem tego jest to, że chcę, aby pole wejściowe było w układzie i wiązało się z różnymi modelami w zależności od załadowanej strony. Pomyślałem, że ustawię tę zmienną globalną w każdym kontrolerze i uzyskam dostęp do niej w dyrektywie.

ATM zmienna jest zakodowana

App.run(function($rootScope){ 
    $rootScope.mymodel = 'search.name'; 
}) 

i dyrektywa

Directives.directive('inputFilter', function(){ 
    return{ 
     restrict: 'E', 
     replace:true, 
     controller: function($scope, $rootScope){ 
      console.log($scope.mymodel); 
      console.log($rootScope.mymodel) 

     }, 
     template: '<input class="filter" type="text" ng-model="mymodel" placeholder="Nach filtern">' 
    } 

}); 

Robi renderowany jako

<input class="filter ng-pristine ng-valid" type="text" ng-model="mymodel" placeholder="Filter"> 

a tekst wewnątrz pola wejściowego jest wartość mymodel zmienna. Konsola.log pokazuje

search.name 
search.name 

Czy ktoś może rzucić trochę światła na ten problem?

+0

może również rzucić okiem na przedstawieniu $ korzenie w szablonie, który posiada odniesienie do $ rootScope w dyrektywach, które mają swój własny zakres. Zobacz - http://stackoverflow.com/questions/22216441/what-is-the-difference-between-scope-roots-and-rootscope – cchamberlain

Odpowiedz

13

Co Myślę, że chcesz to

template: '<input class="filter" type="text" ng-model="' 
    + $rootScope.mymodel + '" placeholder="Nach filtern">' 

Fiddle.

Należy pamiętać, że trzeba będzie wprowadzić do swojego $rootScope dyrektywy:

Directives.directive('inputFilter', function($rootScope) { 
+0

jakiś pomysł, dlaczego wartość zmiennej jest pokazany, jeśli zmieniam szablon w ten sposób? http://jsfiddle.net/ZavXw/1/ – glasspill

+0

jaka jest różnica między ng-model = "{{mymodel}}" a placeholder = "{{mymodel}}" – glasspill

+0

1. Twoje skrzypce: {{}} mówi Kątowy, aby interpolować wartość. Ponieważ Twój kontroler dziedziczy prototypowo z $ rootScope, Angular zastępuje '{{mymodel}}' interpolowaną wartością 'search.name'. 2. Nie można użyć modelu {{}} s wewnątrz modelu, ponieważ Angular nie interpoluje wartości modelu ng. Wartość ng-model musi być (możliwa do przypisania) wyrażeniem kątowym. (Podobnie, wartość ng-click nie może zawierać {{}} s albo - musi również być wyrażeniem kątowym). Wartość elementu zastępczego może zawierać {{}} s, ponieważ kompilator Angular zauważy go i interpoluje. –

Powiązane problemy