我有以下内容:
$scope.modalReset = function () {
gridService.modalReset($scope);
}
$scope.rowAction = function (action, row) {
gridService.rowAction(action, $scope, row, 'Question');
}
$scope.submitItem = function (formData) {
gridService.submitItem($scope, 'Question', formData);
}
有没有办法可以更简单地编写这些函数调用。我不打算将它们结合起来。所有函数都是作用域对象的一部分。
答案 0 :(得分:0)
如果您正在寻找封装这些树函数的方法,那么可以想到两种方法。
方法1:with
声明(请不要使用此方法。它有lots problems。)
with ($scope) {
modalReset = function () {
gridService.modalReset($scope);
};
rowAction = function (action, row) {
gridService.rowAction(action, $scope, row, "Question");
};
submitItem = function (formData) {
gridService.submitItem($scope, "Question", formData);
};
}
方法2:对象文字(这是推荐的方法。)
define($scope, {
modalReset: function () {
gridService.modalReset($scope);
},
rowAction: function (action, row) {
gridService.rowAction(action, $scope, row, "Question");
},
submitItem = function (formData) {
gridService.submitItem($scope, "Question", formData);
}
});
此方法需要一个名为define
的函数:
function define(obj, props) {
for (var key in props)
if (props.hasOwnProperty(key))
obj[key] = props[key];
}
我希望这会有所帮助。
答案 1 :(得分:0)
如果您使用jQuery,则可以使用$.extend
:
$.extend($scope, {
modalReset: function () {
gridService.modalReset($scope);
},
rowAction: function (action, row) {
gridService.rowAction(action, $scope, row, "Question");
},
submitItem = function (formData) {
gridService.submitItem($scope, "Question", formData);
}
});
答案 2 :(得分:0)
这看起来像你正在使用AngularJS($scope
等)。在这种情况下,请使用angular.extend()
,如下所示:
angular.extend($scope, {
modalReset: function () {
...
},
...
});
答案 3 :(得分:0)
有没有办法可以更简单地编写这些函数调用
它们是函数定义,而不是调用:-)它们的内容之间没有太大的相似性,所以你当前的方式很好 - 如果你不喜欢三重赋值,你可以使用提出的extend
功能在其他答案中。
但是如果gridService
方法具有更统一的签名,例如
$scope.modalReset = function () {
gridService.modalReset($scope);
};
$scope.rowAction = function (action, row) {
gridService.rowAction($scope, 'Question', action, row);
};
$scope.submitItem = function (formData) {
gridService.submitItem($scope, 'Question', formData);
};
然后你可以将它缩短为
["modalReset", "rowAction", "submitItem"].forEach(function(methodName) {
$scope[methodName] = gridService[methodName].bind(gridService, $scope, "Question");
});