0

私がangularjsを初めて使用するという免責事項:)

サービスに委任するコントローラーがあり、プロパティを設定した後に scope.apply できるように $scope を保持しようとしています。

var Build = function($scope, $http, mango) {
    var scope = $scope;
    $scope.BuildManagerSubmit = function(selectedProfile) {
        mango.buildMango(selectedProfile.def, function(profiledef) {
            // bunch of property assignments on selectedProfile ...
            scope.$apply();
        }, scope);
    };
};
controllers.controller('Build', ['$scope', '$http', 'mango', Build]);

クロージャーを使用してスコープを保存し、それをサービスに渡していることに注意してください (簡潔にするために省略しています)。サービスは cb.call(context, ...) のようにコールバックするので、スコープへのアクセスを維持します。これはすべて正常に機能していますが、もっと良いイディオムがあるかどうかが気になります。このようなサービスに委任するときに $scope を維持する例はあまり見当たりません。

編集: このアプリケーションは node-webkit を使用しており、「mango」サービスは基本的にファイル システムとやり取りしてシェル スクリプトなどを呼び出します。

4

1 に答える 1

0

mango サービスにそれを処理させ ($rootScope を挿入)、おそらく promise を使用してコールバックを置き換えるので、次のようになります。

var Build = function($scope, $http, mango) {
    $scope.BuildManagerSubmit = function(selectedProfile) {
        selectedProfile.profileDef = mango.buildMango(selectedProfile.def);

        // do something when profileDef returned? (not always necessary)
        selectedProfile.profileDef.then(function(profileDef) {

        });
    };
};
controllers.controller('Build', ['$scope', '$http', 'mango', Build]);
于 2013-04-26T17:45:23.297 に答える