0

誰でも私がここでやっていることを修正できますか

Uncaught TypeError: Object function DataService($scope) {
        this.$scope = $scope;

        // Members Area
        var addVessel = function (userId) {
            alert("user"+userId);
        };

    } has no method 'addVessel'

どうもありがとう - 私はこれが初めてです

回答を確認した後、問題は上位にネストされているようです

これは名前空間/クラスです

// Member Service Namespace
var MemberService;
(function (MemberService) {

// Member service type
var DataService = (function ($scope) {

    // Construct the data service
    function DataService($scope) {
        this.$scope = $scope;

        // Members Area
        this.addVessel = function (userId) {
            alert("user"+userId);
        };

    }

    return DataService;
})();
MemberService.DataService = DataService;

})(MemberService || (MemberService = {}));

そしてこれが呼び出しです

MemberService.DataService.addVessel('XXX');
4

2 に答える 2

5

メソッドをオブジェクトに追加することはありませんaddVessel()が、オブジェクトのスコープ内で「プライベート」メソッドとして使用します。

代わりにこれを使用してください:

function DataService($scope) {
    this.$scope = $scope;

    // Members Area
    this.addVessel = function (userId) {
        alert("user"+userId);
    };

}

編集

あなたのエラーは、 でコンストラクター関数を作成しているようですが、DataService実際にこのコンストラクターを呼び出すことはありません。

したがって、1つの解決策は、この行を変更することです

MemberService.DataService = DataService;

の中へ

MemberService.DataService = new DataService( param );

これにより、 の新しいインスタンスが作成され、これが`DataServiceにアタッチされMemberService.DataServiceます。

ただし、複数のインスタンスを作成したい場合は、ここまでのコードは正しいですが、呼び出すには、まずこのコンストラクターのオブジェクトを作成する必要があります。

var myService = new MemberService.DataService( param );
于 2012-11-29T13:25:40.623 に答える
0

変化する

var addVessel = ...

this.addVessel = ...

それで解決するはずです。

前者の場合addVesselは、関数内のローカル変数ですDataService。後者の場合はDataService、ドット表記を使用してアクセスできる関数オブジェクトのメンバーです。

于 2012-11-29T13:26:00.493 に答える