4

私の工場はコントローラーで定義されておらず、その理由がわかりません。説明する簡単な例を作成しました。

ここでアプリを作成します。

var ruleApp = angular
    .module( "ruleApp", [ 
        "ngRoute",  
        "ruleApp.NewFactory1",
        "ruleApp.NewFactory2",
    ] );

このダミーの例では、アラート ボックスを表示する単純なことを行うファクトリを構築したいと思います。これを行う 2 つの方法を示します (1 つは機能し、もう 1 つは機能しません)。

工場 1:

angular
    .module('ruleApp.NewFactory1', [])
    .factory('NewFactory1', function() {
        return function(msg) {
            alert(msg);
        };
  });

工場 2:

angular
    .module('ruleApp.NewFactory2', [])
    .factory('NewFactory2', function() {
        var showMessageFunction = function(msg) {
            alert(msg);
        };
        return 
        {
            showMessage: showMessageFunction
        };
  });

ファクトリ 1 の戻り値の型は関数であり、ファクトリ 2 の戻り値の型はプロパティ (関数型) を持つオブジェクトであることに注意してください。

ここで、コントローラーでこれらのファクトリの両方をどのように使用するかを見てください。

 ruleApp.controller( "RuleController", function( $scope, NewFactory1, NewFactory2 ) {
    NewFactory1("1");
    NewFactory2.showMessage("2");
});

ここで問題が露呈します。実行中に の警告ボックスが表示されますが、 NewFactory2 が未定義NewFactory1("1");であるため、 の実行中に失敗しますNewFactory2.showMessage("2");(TypeError: 未定義のメソッド 'showMessage' を呼び出せません)。

問題を見つけるのを手伝ってもらえますか? NewFactory2 のようなファクトリを使用できるようにしたいのは、ファクトリで複数のことを実行できるようにしたいからです (つまり、複数の機能を持たせたい)。ちなみにAngularのバージョンは1.2.1です。

4

1 に答える 1

5

factory 2 は(デモ)

angular
.module('ruleApp.NewFactory2', [])
.factory('NewFactory2', function() {
    var showMessageFunction = function(msg) {
        alert(msg);
    };
    return {    // <--------- do not go on a new line after return
        showMessage: showMessageFunction
    };
});
于 2013-11-26T19:11:42.653 に答える