Javascript $scope在控制器中未定义

Javascript $scope在控制器中未定义,javascript,angularjs,Javascript,Angularjs,我有世界上最简单的控制器,我想访问$scope,但它是“未定义”的,我一生都无法弄明白为什么,无论所有函数如何正确调用,数据服务等都能完美工作,只是我无法访问$scope 控制器代码如下 app = angular.module("windscreens", []); app.controller('DamageCtrl', function($scope, DataService) { $scope.setDamageLocation = function(location) {

我有世界上最简单的控制器,我想访问$scope,但它是“未定义”的,我一生都无法弄明白为什么,无论所有函数如何正确调用,数据服务等都能完美工作,只是我无法访问$scope

控制器代码如下

app = angular.module("windscreens", []);

app.controller('DamageCtrl', function($scope, DataService) {
  $scope.setDamageLocation = function(location) {
    DataService.getDamage().setLocation(location);
  };
  $scope.isLocation = function(requiredLocation) {
    return DataService.getDamage().getLocation() === requiredLocation;
  };
  $scope.progress = function() {
  };
}); 

要从HTML模板访问作用域上的属性,您只需要使用属性名称,而不需要使用它编写$scope

例如:

<button ng-click="progress()"></button>


在javascript中,您只能访问控制器内的$scope及其函数。如果调用外部资源,例如:DataService模块,则除非您将其作为参数显式传递,否则它将无法访问$scope。

我使用替代语法使其正常工作。如下所述,仍然不确定它为什么不起作用,但嘿哼

app.controller('DamageCtrl', ['$scope', 'DataService',
  function($scope, DataService) {
    $scope.setDamageLocation = function(location) {
      DataService.getDamage().setLocation(location);
    };

    $scope.isLocation = function(requiredLocation) {
      return DataService.getDamage().getLocation() === requiredLocation;
    };

    $scope.progress = function() {
      console.log($scope);
    };
  }
]);

$scope
未定义时,您如何声明
数据服务
正在工作?在您的代码中,错误发生在哪里?目前还没有错误,我正在尝试找出如何使函数“progress”工作,并查看了“$scope”是什么,未定义的是什么-数据服务在前端工作,触发setLocation的是什么,消耗isLocation的是100%按预期工作的您“看”了什么位于
$scope
。我想你的问题就在那里。在setLocation函数中使用断点,然后使用控制台只执行“$scope”,控制台就是控制台。它不会进入脚本所在的范围。通过设置断点并查看浏览器提供的调试信息,可以检查
$scope
引用的值。我使用GoogleChrome进行调试,它将在右边的面板中显示信息,所有变量都按作用域分类。这种方法是为了保护插入的参数不受代码压缩器的影响。你的代码被压缩了吗?不,我们还在开发阶段,我们在测试之前不会缩小-我不知道为什么它不起作用,但现在它已经起作用了,事实上,正如你所说的那样,这种方式更好,因为它允许完全缩小!