Javascript AngularJS:未定义获取$scope错误,因为我已经声明了$scope
我一直在尝试一些不同的配置,但是我一直在AngularJS文件中得到一个Javascript AngularJS:未定义获取$scope错误,因为我已经声明了$scope,javascript,angularjs,Javascript,Angularjs,我一直在尝试一些不同的配置,但是我一直在AngularJS文件中得到一个$scope is not defined error,尽管在控制器中定义了它 我正在尝试让底部的控制器部分中的$scope.idStore和$scope.patientTime都工作。这些函数从具有特定ID的输入框中提取数据。然后将它们存储为patientID变量patientTime将此ID与附加的时间戳连接起来,然后生成警报消息 测试表明,我在尝试读取idStore或patientTime 以下是AngularJS的主
$scope is not defined error
,尽管在控制器中定义了它
我正在尝试让底部的控制器部分中的$scope.idStore
和$scope.patientTime
都工作。这些函数从具有特定ID的输入框中提取数据。然后将它们存储为patientID
变量patientTime
将此ID与附加的时间戳连接起来,然后生成警报消息
测试表明,我在尝试读取idStore
或patientTime
以下是AngularJS的主要代码:
'use strict';
(function() {
//generate JSON-based list for menu links
var AppCtrl;
AppCtrl = function () {
function AppCtrl($scope) {
$scope.list = [
{
label: 'Main Menu',
icon: 'fa fa-home fa-fw 4x',
link: '#/appLaunch',
move: function() {
console.log("HOME");
}
},
{
label: 'Patient',
icon: 'fa fa-user fa-fw 4x',
link: '#/pCredential',
move: function(){
console.log("PATIENT");
}
},
{
label: 'Technician',
icon: 'fa fa-user-md fa-fw 4x',
link: '#/tLogin',
move: function(){
console.log("TECHNICIAN");
}
},
{
label: 'Administrator',
icon: 'fa fa-cogs fa-fw 4x',
link: '#/aLogin',
move: function(){
console.log("ADMINISTRATOR");
}
}
];
}
return AppCtrl;
}();
// Declare app level module which depends on views and components
angular.module('careApp', [
'ngRoute',
'ngMaterial',
'ngAria',
'ngAnimate',
'ngMaterialDatePicker',
'careApp.appLaunch',
'careApp.pCredential',
'careApp.dialog1',
'careApp.pSurvey',
'careApp.pTheme',
'careApp.pThanks',
'careApp.tLogin',
'careApp.tMain',
'careApp.aLogin'
])
.config(['$routeProvider', function($routeProvider) {
//if given invalid partial, go back to appLaunch.html
$routeProvider.otherwise({redirectTo: '/appLaunch'});
}])
.controller('AppCtrl', ['$scope', AppCtrl]);
//declare empty patientID to be accessed by functions
var patientID = '';
//grab relevant data from input and add it to patientID
$scope.idStore = function() {
var patientFirstInitial = document.getElementById('patientFirstInitial');
var patientLastName = document.getElementById('patientLastName');
var aptDate = document.getElementById('aptDate');
var aptTime = document.getElementById('aptTime');
//store patientID as global variable
patientID = patientFirstInitial + patientLastName + aptDate + aptTime;
console.log('Registered ' + patientID);
}
//on time selection, concat to patientID, then throw alert
$scope.patientTime = function(){
//concats selected theme to patient ID, then sends to database
var patientTheme = document.getElementById('');
patientID += patientTheme;
alert('Patient ' + patientID + ' has been registered.');
}
}());
我的怀疑集中在如何设置这个AngularJS文件上这是否做得不正确?您在函数中定义了两次
AppCtrl
,而且您的iLife结束括号也弄乱了。它不应位于AppCtrl
code之后。它应该在那里结束
代码
(function() {
AppCtrl = function($scope) {
//why don't have it simple like this
//inner code will be as is
};
// Declare app level module which depends on views and components
angular.module('careApp', [
//many dependecies
])
.config(['$routeProvider', function($routeProvider) {
//if given invalid partial, go back to appLaunch.html
$routeProvider.otherwise({
redirectTo: '/appLaunch'
});
}])
.controller('AppCtrl', ['$scope', AppCtrl]);
//code as is
})();
$scope未定义
发生错误,因为
AppCtrl = function () {
它是AppCtrl函数,没有$scope
依赖项。在该函数中,您请求的是$scope
值,而不是像函数AppCtrl($scope){
在解释答案的第二部分时,假设您有正确的变量引用。
var-AppCtrl;
是在您的声明函数范围内声明的,而不是在@Dalorzo所说的范围内声明的,您已经将AppCtrl
定义包装在一个IIFE中,我想您也应该会经历一些tr由于您在angular.controller
定义中引用了AppCtrl
的作用域,这超出了IIFE的范围。您还应该注意的“严格使用”;
位置,因为这也会影响它的执行方式。IIFE语法在OP代码的最后仍然混乱。我认为OP to在一个生命周期内完成所有这些,否则做window.AppCtrl=AppCtrl;
@charlietfl好眼睛..谢谢大副提醒..:-)编辑我的答案谢谢你的帮助!这似乎解决了我的问题。