33

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'コントローラーに追加しました。

HTMLからファクトリメソッドを呼び出すにはどうすればよいですか?

(*明確でない場合は、質問を変更/編集してください)

ありがとうございました、

4

3 に答える 3

52

ええと、実際にそれを行うことは想定されていません...しかし、できることは、サービス オブジェクトを $scope のプロパティに配置し、そこから呼び出すことです。

app.controller('MyCtrl', function($scope, switcher) {
   $scope.switcher = switcher;
});
于 2013-05-14T14:15:22.560 に答える
3

「ページの読み込み時に html から angularjs の scope/factory/service を呼び出す方法」という、より一般的な質問がありました。私の解決策は、ng-show 内でメソッドを呼び出すことでした。

  1. 問題のコンテキストを囲む最上位の要素で、
  2. ng-show ディレクティブを使用してメソッドを呼び出します。
  3. このメソッドは、ページを表示する前に実行されます。
  4. このようなソリューションを使用して、ページを表示する前にブートストラップ作業が完了していることを確認することもできます (これにより、散らばったレンダリングで可動部分の数を減らすことができます)。

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

于 2013-11-04T22:02:50.713 に答える