我在该函数中有角度控制器和Javascript函数,我正在调用角度函数。我收到错误:$ scope.Name不是函数,$ scope.dates不是函数。
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);
});
});
答案 0 :(得分:3)
在$scope.Name
$scope.dates
和validation()
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();
}
}
小提琴:http://jsfiddle.net/Lvc0u55v/4872/
更好的方法是约翰帕帕风格' :Y033
将可绑定成员放在控制器的顶部,按字母顺序排列,而不是通过控制器代码传播。
为什么?:将可绑定成员放在顶部使其易于阅读和 帮助您即时识别控制器的哪些成员 绑定并在视图中使用。
为什么?:在线设置匿名函数可以很容易,但是当这些 函数是超过1行代码,他们可以减少 可读性。定义可绑定成员下面的函数( 函数将被提升)移动实现细节, 使可绑定成员保持最佳状态,并使其更易于阅读。
/* 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() {
/* */
}
}
答案 1 :(得分:0)
正如@Harald Wiesinger所说,在调用函数之前声明调用函数。
答案 2 :(得分:-1)
在范围功能
之后进行验证$scope.Name = function () {
// do something
}
$scope.dates = function () {
// do something
}
function validation() {
$scope.pageload = true;
$scope.Name();
$scope.dates();
}