Подтвердить что ты не робот

Как вызвать factory методы из HTML в angularjs?

В controller я выполнил следующие методы:

var isPaused  = false; 

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

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

И я могу назвать это из HTML, например:

<body  ng-controller="Cntrl">

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

Как вы видите, если isPaused() возвращает false, я получаю <h4>Search Location Mode</h4>

Это утилита, поэтому я хочу определить ее как factory

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

Никаких исключений, кроме

когда я пытаюсь называть его так:

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

Ничего не происходит.

** Я добавил 'switcher' в контроллер.

Как я могу вызвать метод factory из HTML?

(* Вы можете изменить/изменить мой вопрос, если это кажется неясным)

Спасибо,

4b9b3361

Ответ 1

Ну, вы на самом деле не должны это делать... но то, что вы можете сделать, - это разместить свой объект службы в свойстве в области $scope и вызвать его оттуда.

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

Ответ 2

У меня был более общий вопрос: "Как вызвать угловую область/ factory/сервис из html при загрузке страницы". Моим решением было вызвать метод в ng-show.

  • В самом высоком элементе, окружающем рассматриваемый контекст,
  • Вызвать метод, используя директиву ng-show.
  • Метод будет запущен до отображения страницы.
  • Обратите внимание, что вы также можете использовать такое решение, чтобы убедиться, что работа над начальной загрузкой завершена до отображения страницы (это может уменьшить количество движущихся частей в разбросанном рендеринге).

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