Javascript AngularJS:未定义获取$scope错误,因为我已经声明了$scope

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的主

我一直在尝试一些不同的配置,但是我一直在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好眼睛..谢谢大副提醒..:-)编辑我的答案谢谢你的帮助!这似乎解决了我的问题。