Javascript AngularJS中有全局函数吗?[见守则]
我们最终决定在工作中使用AngularJS,我被要求开发一个小原型,看看AngularJS能做什么 我们有一个gradeController.js文件,其中包含以下代码:Javascript AngularJS中有全局函数吗?[见守则],javascript,angularjs,angularjs-scope,single-page-application,Javascript,Angularjs,Angularjs Scope,Single Page Application,我们最终决定在工作中使用AngularJS,我被要求开发一个小原型,看看AngularJS能做什么 我们有一个gradeController.js文件,其中包含以下代码: var gradeControllers = angular.module('gradeControllers', []); gradeControllers.controller('GradeListController', ['$scope', '$http', function ($scope, $http)
var gradeControllers = angular.module('gradeControllers', []);
gradeControllers.controller('GradeListController', ['$scope', '$http',
function ($scope, $http) {
$http({
method: 'GET',
url: '/api/grades',
params: {
skip: 0,
take: 1000
}
}).success(function (data) {
$scope.grades = data.splice(0, 150);
$(".loader").hide();
});
$scope.saveChanges = function (grade) {
alert("SAVING CHANGES...");
$scope.gradeValue = grade.gradeValue;
$scope.comment = grade.comment;
$http({
method: 'PUT',
url: '/api/grades',
params: {
id: grade.gradeId,
gradeValue: grade.gradeValue
}
}).success(function () {
window.location.href = "#/grades";
}).fail(function () {
alert('FAIL');
});
};
$scope.orderProp = 'dateModified';
}]);
gradeControllers.controller('GradeDetailController', ['$scope', '$routeParams', '$http',
function($scope, $routeParams, $http) {
$http({
method: 'GET',
url: '/api/grades/' + $routeParams.gradeId,
}).success(function (data) {
$scope.grade = data;
$("form").show();
$(".loader").hide();
});
$scope.saveChanges = function (grade) {
$scope.gradeValue = grade.gradeValue;
$scope.comment = grade.comment;
$http({
method: 'PUT',
url: '/api/grades',
params: {
id: grade.gradeId,
gradeValue: grade.gradeValue
}
}).success(function () {
window.location.href = "#/grades";
}).fail(function() {
alert('FAIL');
});
};
}
]);
现在,正如您所看到的,我们在两个控制器中都复制了saveChanges()
函数,这正是困扰我们的地方
在定义模块时,是否可以几乎插入$scope
和$http
,并将saveChanges()
函数置于控制器之外?如下所示:
var gradeControllers = angular.module('gradeControllers', ['$scope', '$http']);
$scope.saveChanges = function (grade) {
$scope.gradeValue = grade.gradeValue;
$scope.comment = grade.comment;
$http({
method: 'PUT',
url: '/api/grades',
params: {
id: grade.gradeId,
gradeValue: grade.gradeValue
}
}).success(function () {
window.location.href = "#/grades";
}).fail(function () {
alert('FAIL');
});
};
gradeControllers.controller('GradeListController', [,
function ($scope, $http) {
$http({
method: 'GET',
url: '/api/grades',
params: {
skip: 0,
take: 1000
}
}).success(function (data) {
$scope.grades = data.splice(0, 150);
$(".loader").hide();
});
$scope.saveChanges();
$scope.orderProp = 'dateModified';
}]);
gradeControllers.controller('GradeDetailController', ['$routeParams',
function($scope, $routeParams, $http) {
$http({
method: 'GET',
url: '/api/grades/' + $routeParams.gradeId,
}).success(function (data) {
$scope.grade = data;
$("form").show();
$(".loader").hide();
});
$scope.saveChanges();
}
]);
我们通常通过使用调用saveChanges()
所以我相信(我希望)如果我们把saveChanges()
放在控制器之外,它仍然会知道作用域是什么
如果您需要任何澄清,请让我知道,我希望比我更有经验的人能够帮助我们解决这个问题看看
服务
-我想说这就是您想要的。()一个选择是创建自己的服务
app.service('util', ['$http', [function () {
this.util = {
_saveChanges = function (scope, grade) {
scope.gradeValue = grade.gradeValue;
scope.comment = grade.comment;
$http({
method: 'PUT',
url: '/api/grades',
params: {
id: grade.gradeId,
gradeValue: grade.gradeValue
}
}).success(function () {
window.location.href = "#/grades";
}).fail(function() {
alert('FAIL');
});
}
}
var self = this.util;
return {
saveChanges: this.util._saveChanges
}
}]);
您可以将此服务包括到您的控制器中
var gradeControllers = angular.module('gradeControllers', ['$scope', '$http', 'util']);
gradeControllers.controller('GradeListController', [,
function ($scope, $http, util) {
$scope.saveChanges = util.saveChanges;
...
}]);
电话将会是
$scope.saveChanges($scope, grade)
在你通过当前$scope和grade的地方看看
服务
——我想这就是你要找的。()您不应该在save方法中触及$scope,然后您可以将该方法模式化为服务。只需查看服务即可。我认为你们是对的——他们似乎正是我们所需要的@ThorJacobsen你介意写下你的评论作为回答,这样我就可以选择它作为正确的答案吗?除非有人有其他想法/建议?请随意接受或等待更多评论:)这正是我要做的;)我会再等几分钟,给其他人一个机会,但你似乎知道你在说什么,所以没有理由我不能接受:)谢谢你@ThorJacobsen(顺便问一下,你有什么超能力吗?:P)谢谢你的意见@Alex如果我采取上述方法,我必须在哪里定义服务?是否仍在gradeController.js文件中?或者在单独的文件中?最好有单独的文件。感谢您的帮助@Alex您需要将此文件包括在“index.html”文件(或任何称为基本html页面的文件)中,就像您为控制器所做的一样。