찾다

 >  Q&A  >  본문

angular.js - Angular中控制器函数声明时的$scope到底是形参还是实参?

初学Angular遇到了点困惑,以下面这个控制器函数为例

    function hello($scope) {
        $scope.name = '张三'
    }

这是个函数声明,$scope理应是形参吧?可是把$scope改为其他标识符如s就不行了。可见$scope是hello函数被调用时传入的实参。但这三行代码是函数的声明,怎么就传入实参了呢?

我大概意识到了这不是一个正常的函数声明,可能与Angular的控制器函数的绑定机制有关系?具体是怎样的?

世界只因有你世界只因有你2743일 전778

모든 응답(3)나는 대답할 것이다

  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-15 16:52:49

    이런 종류의 매개변수 전달을 통해 종속성을 얻는 것은 종속성 주입의 표현 중 하나인 AngularJS의 주요 기능입니다.
    그런데 왜 매개변수 선언만으로 종속성을 얻을 수 있나요?

    AngularJS는 $injector를 사용하여 $injector管理依赖的查询与加载,比如

    // 使用注入器加载应用
    var injector = angular.injector(['ng', 'myApp']);
    // 通过注入器加载$controller服务
    var $controller = injector.get('$controller');
    var scope = injector.get('$rootScope').$new();
    // 加载控制器并传入一个作用域
    var MyController = $controller('MyController', {$scope: scope})
    

    如果没有显示声明,$injector와 같은 종속 쿼리 및 로딩을 관리합니다. 으아아아 명시적인 선언이 없으면 $injector매개변수 이름을 기준으로 종속성을 추론
    합니다. 이때 매개변수의 순서는 의미가 없습니다.

    즉, 다음과 같이 선언할 수도 있습니다.🎜 으아아아

    회신하다
    0
  • 滿天的星座

    滿天的星座2017-05-15 16:52:49

    글쎄요, 이건 그냥 함수 선언으로 작성한 것입니다. 형식 매개변수의 이름이 중요한지 여부는 전적으로 독자가 결정합니다. ECMAScript 표준 파서는 중요하다고 생각하지 않지만(아마도) Angular는 js를 사용했습니다. "js" 파서를 작성했습니다. . . 이런 식으로 함수 매개변수의 이름이 중요합니다

    회신하다
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-15 16:52:49

    범위

    여기에서는 AngularJS의 $scope 객체를 사용하여 도메인 모델을 변환합니다
    뷰(템플릿)에 노출됩니다. 속성을 범위 인스턴스로 설정하면 템플릿이 렌더링될 때 값을 얻을 수 있습니다.

    스코프는 특정 보기에 대한 데이터 및 특정 기능을 확장할 수도 있습니다. 특정 UI를 변환하려면 범위 인스턴스에 일부 함수를 정의하기만 하면 됩니다
    논리가 템플릿에 노출됩니다.

    예를 들어 다음과 같이 name 변수에 대한 getter 메서드를 만들 수 있습니다.

    으아아아

    그런 다음 템플릿에서 다음과 같이 사용하세요.
    <h1>Hello, {{getName()}} !</h1>

    $스코프
    객체를 사용하면 모델의 어느 부분이 이 도메인 내에 있는지, 그리고 뷰 레이어에서 어떤 작업을 사용할 수 있는지 매우 정확하게 제어할 수 있습니다. 이론적으로 AngularJS 범위는 MVVM 패턴 ViewModel과 매우 유사합니다.

    http://note.sdo.com/u/635412003927148913/n/s6cBN~lcIHwG4M1-Y000LW

    회신하다
    0
  • 취소회신하다