如何从控制器内部的javascript函数调用角度作用域函数
我在函数中有角度控制器和Javascript函数,我调用角度函数。我收到错误:$scope.Name不是函数,$scope.dates不是函数如何从控制器内部的javascript函数调用角度作用域函数,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我在函数中有角度控制器和Javascript函数,我调用角度函数。我收到错误:$scope.Name不是函数,$scope.dates不是函数 function validation() { $scope.pageload = true; $scope.Name(); $scope.dates(); } $scope.Name = function () {
function validation() {
$scope.pageload = true;
$scope.Name();
$scope.dates();
}
$scope.Name = function () {
// do something
}
$scope.dates = function () {
// do something
}
控制器内部工作正常
var MyController = function ($scope, service)
{
function validation() {
$scope.pageload = true;
$scope.Name();
$scope.dates();
}
$scope.Name = function () {
// do something
}
$scope.dates = function () {
// do something
}
});
working:
var MyController = function ($scope, service)
{
LoginHomeService.getHomeService(function (data) {
$rootScope.CT1SessionObj = data.CT1SessionObj;
validation();
}, function (response) {
alert(response.Message);
});
function validation() {
$scope.pageload = true;
$scope.Name();
$scope.dates();
}
$scope.Name = function () {
// do something
}
$scope.dates = function () {
// do something
});
Not working:
var MyController = function ($scope, service)
{
LoginHomeService.getHomeService(function (data) {
$rootScope.CT1SessionObj = data.CT1SessionObj;
validation();
function validation() {
$scope.pageload = true;
$scope.Name();
$scope.dates();
}
$scope.Name = function () {
// do something
}
$scope.dates = function () {
// do something
}
}, function (response) {
alert(response.Message);
});
});
将验证放在作用域函数之后
$scope.Name = function () {
// do something
}
$scope.dates = function () {
// do something
}
function validation() {
$scope.pageload = true;
$scope.Name();
$scope.dates();
}
在验证()的顶部声明
$scope.Name
和$scope.dates
Javascript自上而下工作,因此您的函数$scope.Name
和$scope.Dates
还不存在
此外,尽量不要将“Name”用作函数。这些词大部分是保留关键字
var myApp = angular.module('myApp', []);
//myApp.directive('myDirective', function() {});
//myApp.factory('myService', function() {});
function MyCtrl($scope) {
$scope.Name = function() {
// do something
}
$scope.dates = function() {
// do something
}
function validation() {
$scope.pageload = true;
$scope.Name();
$scope.dates();
}
}
小提琴:
更好的方法是“约翰·帕帕风格”:
将可绑定成员按字母顺序放置在控制器的顶部,不要在控制器代码中散布
为什么?:将可绑定的成员放在顶部便于阅读和编辑
帮助您立即识别控制器的哪些成员可以
绑定并在视图中使用
为什么?:在线设置匿名函数很容易,但是
函数是一行以上的代码,它们可以减少
可读性。在可绑定成员(
功能将被提升)向下移动实施细节,
将可绑定成员保持在顶部,使其更易于阅读
正如@Harald Wiesinger提到的,在调用函数之前声明调用的函数 所有这些代码都在哪里?这都是在控制器内部还是…?从某个地方调用
validation()
您可能想要创建一个Plunker:在控制器内部不调用服务在服务内部调用验证javascript函数,在js函数中调用角度函数。在控制器内部工作,出于某些原因,我在服务响应中添加了一些内容。如果你想提及某人,请使用评论而不是回答
/* avoid */
function SessionsController() {
var vm = this;
vm.gotoSession = function() {
/* ... */
};
vm.refresh = function() {
/* ... */
};
vm.search = function() {
/* ... */
};
vm.sessions = [];
vm.title = 'Sessions';
}
/* recommended */
function SessionsController() {
var vm = this;
vm.gotoSession = gotoSession;
vm.refresh = refresh;
vm.search = search;
vm.sessions = [];
vm.title = 'Sessions';
////////////
function gotoSession() {
/* */
}
function refresh() {
/* */
}
function search() {
/* */
}
}