2013-05-14 17 views
29

W controller Śledzę metody:Jak wywołać metody fabryczne z HTML w angularjs?

var isPaused = false; 

$scope.switcher = function (booleanExpr, trueValue, falseValue) { 
    return booleanExpr ? trueValue : falseValue; 
}; 

$scope.isPaused = function() { 
    return isPaused; 
}; 

I mogę zadzwonić z HTML jak:

<body ng-controller="Cntrl"> 

... 
<h4> 
{{ switcher(isPaused(), 'Search Address Mode', 'Search Location Mode')}} 
</h4> 
<div class="btn-group"> 
    ...  
</div> 

Jak widać, jeśli isPaused() powraca false uzyskać <h4>Search Location Mode</h4>

Jest to narzędzie, dlatego Chcę go zdefiniować jako factory

feederliteModule.factory('switcher', function() { 
return { 
    sw: function (booleanExpr, trueValue, falseValue) { 
     return booleanExpr ? trueValue : falseValue; 
    } 
    }; 
}); 

Żadnych wyjątków ale

gdy próbuję to nazwać jak:

<h4> 
{{ switcher.sw(isPaused(), 'Search Address Mode', 'Search Location Mode')}} 
</h4> 
<div class="btn-group"> 
    ...  
</div> 

Nic się nie dzieje.

** Do kontrolera dodałem 'switcher'.

Jak mogę wywołać metodę fabryczną z HTML?

(* Ty witamy zmienić/edytować moje pytanie czy to nie wydaje się oczywiste)

Dziękuję

+0

Skąd udało Ci się to zrobić? Mam podobny problem ... może nie powinienem robić tego tak dobrze – trainoasis

+0

@ user1524316 cóż, patrz odpowiedź poniżej –

+0

Myślałem, że to nie rozwiąże całkowicie twojego problemu, ponieważ nie zaakceptowany? – trainoasis

Odpowiedz

52

Cóż, nie jesteś naprawdę tego robić ... ale czego można do umieszczenia obiektu usługi w usłudze w twoim zasięgu $ i wywołanie go stamtąd.

app.controller('MyCtrl', function($scope, switcher) { 
    $scope.switcher = switcher; 
}); 
+3

Dlaczego nie przypuszczać? czy wydaje się być brudny? Twoje rozwiązanie działa. Pytanie brzmi, dlaczego potrzebuję utworzyć '$ scope.switcher', jeśli' kontroler' otrzyma identyfikator 'switcher'.Dzięki –

+7

widoki HTML można łączyć tylko z kontrolerem (przy użyciu zmiennej $ scope) lub z dyrektywami. Jakikolwiek inny sposób nie jest kanciasty :) – Chandermani

+0

@ Chandermani Używam tej metody w kilku kontrolerach, a łatwym/krótkim sposobem jest stworzenie fabryki lub usługi. –

3

Miałem bardziej ogólne pytanie: "Jak wywołać zakres angularjs/factory/service z html na ładowanie strony." Moim rozwiązaniem było wywołanie metody w ramach programu ng-show.

  1. Na najwyższym elementem otaczającego kontekstu w pytaniu
  2. wywołać metodę za pomocą dyrektywy ng-show.
  3. Metoda zostanie uruchomiona przed wyświetleniem strony.
  4. Uwaga Można również użyć roztworu tak, aby upewnić się, że praca ładującego jest zakończona przed wyświetleniem strony (może to zmniejszyć liczbę ruchomych części w rozproszonego renderingu)

<div ng-show="runThisMethod(someVarOnScope)" .....>

Powiązane problemy