angularjs通过闭包保存$ scope

时间:2013-04-26 16:13:22

标签: angularjs angularjs-scope

免责声明我是angularjs的新手:)

我有一个委托给服务的控制器,我正在尝试保留$ scope,所以我可以在设置属性后使用scope.apply:

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'服务本质上是与文件系统交互以调用shell脚本等。

1 个答案:

答案 0 :(得分:0)

我会让芒果服务处理它(在其中注入$ rootScope),也许使用promises来替换回调,所以它看起来像这样:

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]);