控制器及其功能中$ scope&s的混淆?

时间:2018-03-22 17:23:22

标签: angularjs

我是UI新手。我确实在AngularJS中的$scope之间感到困惑。请参阅下面的代码段。

var mainApp = angular.module("mainApp", []);

mainApp.controller(['$scope', function($scope) {

    $scope.name = "John";

}]);

那么,$scopefunction($scope)之间的区别是什么?我们怎样才能将两者联系起来?是否需要$scope参数?请举个例子解释我。我真的很感激。

谢谢, 约翰

2 个答案:

答案 0 :(得分:1)

1.当您应用以下Angular JS代码的缩小时:

var mainApp = angular.module("mainApp", []);
mainApp.controller(['$scope','$log', function($scope,$log) {
$scope.name = "John";
$log.log("John");
}]);

缩小版本:

var mainApp=angular.module("mainApp",
[]);mainApp.controller(["$scope","$log",function(n,o)
{n.name="John",o.log("John")}]);

2.当您应用以下Angular JS代码的缩小时:

var mainApp = angular.module("mainApp", []);
mainApp.controller(function($scope,$log) {
$scope.name = "John";
$log.log("John");
});

缩小版本:

var mainApp=angular.module("mainApp",[]);mainApp.controller(function(n,a)
{n.name="John",a.log("John")});

3.当您应用以下Angular JS代码的缩小时:

var mainApp = angular.module("mainApp", []);
mainApp.controller(function($log,$scope) {
$scope.name = "John";
$log.log("John");
});

缩小版本:

var mainApp=angular.module("mainApp",[]);mainApp.controller(function(n,a)
{n.name="John",a.log("John")});

你会在Ex-2和Ex-3中注意到你已经互换了$ scope和$ log的依赖位置,那么你的缩小版本也是相同的,这将给你dependency Injection error,所以我们放置一个字符串值为字符串值无法缩小,如您在Ex-1中所见。

每次定义控制器时都不需要$ scope,但$ scope提供了binding the HTML (view) and the JavaScript (controller).等重要功能。 https://docs.angularjs.org/guide/scope

答案 1 :(得分:0)

  

$scopefunction($scope)之间有什么区别?

当你这样做时

  mainApp
  .controller(
    ['$scope', //line 1
      function($scope) //line 2
      {
      }
    ]);
  • line 1中,它引用$scope,这是一个引用应用程序模型的对象
  • line 2中,它是变量(也称为 $ scope ),其中注入了(上面提到的) $ scope 对象。此变量可以包含任何其他名称,$scope用作在整个代码中保留暗示性引用的方法。

例如,如果我将其名称更改为myFunnyScope,您的示例也会起作用:

var mainApp = angular.module("mainApp", []);

mainApp.controller(['$scope', function(myFunnyScope) {
    myFunnyScope.name = "John";
}]);
  

我们如何才能将两者联系起来?

以我之前发布的代码段作为参考,您可以告诉 $ scope 对象正在myFunnyScope变量中注入,这意味着您使用myFunnyScope就好像它是$scope本身。

  

是否需要$scope参数?

只要您需要访问上述 $ scope 对象提供的所有权益,当您执行minification时,需要注入对象([$scope, ... )进入持有者(function($scope) { ...),以免破坏AngularJS应用程序。否则,不,你不需要注入对象,但是你必须在函数参数中显式地调用它$scope,以便AngularJS知道它必须在其中注入$scope对象。此规则不仅适用于$scope,还适用于所有其他AngularJS相关服务,工厂等,例如$timeout$window$$location等。

如果您不想直接使用$scope,可能需要阅读AngularJS injection mechanism并考虑使用controller as语法,原因为here