1

さまざまなコントローラーで使用されている関数がいくつかありますが、それをコントローラーに何度もコピーして貼り付けるのではなく、引き出して工場に配置したいと考えています。

ただし、Angular を介して HTML で関数を呼び出そうとすると、機能し{{expressions}}ません。

代わりに、ファクトリの関数を呼び出す各コントローラーの $scopes 内に関数を作成して、DOM が式を読み取れるようにしましたが、これは冗長に思えます。これを修正して、ファクトリから関数を簡単に呼び出せるようにする方法はありますか?

これが私が最初に試したものです:

index.html :

<div ng-controller="MyController">
    The rating of this item is: {{MakeGraph.getRating(whichItem)}}<br />
    The votes of this item is: {{MakeGraph.getVotes(whichItem)}}
</div>

MyController.js :

controllers.controller('MyController', ['$scope', 'MakeGraph', '$routeParams', function($scope, MakeGraph, $routeParams){
    $scope.whichItem = $routeParams.itemId;
    //no other reference to MakeGraph here
}])

factory.js :

app.factory('MakeGraph', function(){
    var service = {};

    service.getRating = function(itemNo){
        ...
        return ...;
    };

    service.getVotes = function(itemNo){
        ...
        return ...;
    };

    return service;

});

代わりに、 MyController を次のように変更した場合にのみ機能させることができます。

$scope.getRating = function(){
    return MakeGraph.getRating(itemNo);
};

$scope 内で関数を呼び出す必要がないように、これを修正できますか? ありがとう。

4

1 に答える 1

3

$scope.MakeGraph = MakeGraphコントローラーに追加する

controllers.controller('MyController', ['$scope', 'MakeGraph', '$routeParams', function($scope, MakeGraph, $routeParams){
    $scope.whichItem = $routeParams.itemId;
    $scope.MakeGraph = MakeGraph
}])

MakeGraph次に、ビューからアクセスできます

例:

<a ng-click="MakeGraph.getVotes(12)"> Click me </a>

サービスでプロミスを返す場合、.success / .then / .error ...イベントを適切に処理するために、おそらくコントローラーでラップする必要があることに注意してください

于 2014-06-27T14:05:22.150 に答える