찾다

 >  Q&A  >  본문

angular.js - Angular에서 컨트롤러 함수를 선언할 때 $scope는 형식 매개변수인가요 아니면 실제 매개변수인가요?

Angular를 처음 접할 때 약간 혼란스럽습니다. 다음 컨트롤러 기능을 예로 들어보겠습니다.

으아아아

함수 선언인데, $scope는 형식적인 매개변수여야겠죠? 그러나 $scope를 s와 같은 다른 식별자로 변경하면 작동하지 않습니다. $scope는 hello 함수가 호출될 때 전달되는 실제 매개변수임을 알 수 있습니다. 하지만 이 세 줄의 코드는 함수 선언인데 실제 매개변수가 전달되는 이유는 무엇일까요?

아마도 이것이 일반적인 함수 선언이 아니라는 것을 깨달았을 것입니다. 아마도 Angular의 컨트롤러 함수 바인딩 메커니즘과 관련이 있는 것일까요? 정확히 어떻게 생겼나요?

世界只因有你世界只因有你2776일 전806

모든 응답(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
  • 취소회신하다