Angular를 처음 접할 때 약간 혼란스럽습니다. 다음 컨트롤러 기능을 예로 들어보겠습니다.
으아아아함수 선언인데, $scope는 형식적인 매개변수여야겠죠? 그러나 $scope를 s와 같은 다른 식별자로 변경하면 작동하지 않습니다. $scope는 hello 함수가 호출될 때 전달되는 실제 매개변수임을 알 수 있습니다. 하지만 이 세 줄의 코드는 함수 선언인데 실제 매개변수가 전달되는 이유는 무엇일까요?
아마도 이것이 일반적인 함수 선언이 아니라는 것을 깨달았을 것입니다. 아마도 Angular의 컨트롤러 함수 바인딩 메커니즘과 관련이 있는 것일까요? 정확히 어떻게 생겼나요?
曾经蜡笔没有小新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
는 매개변수 이름을 기준으로 종속성을 추론
합니다. 이때 매개변수의 순서는 의미가 없습니다.
滿天的星座2017-05-15 16:52:49
글쎄요, 이건 그냥 함수 선언으로 작성한 것입니다. 형식 매개변수의 이름이 중요한지 여부는 전적으로 독자가 결정합니다. ECMAScript 표준 파서는 중요하다고 생각하지 않지만(아마도) Angular는 js를 사용했습니다. "js" 파서를 작성했습니다. . . 이런 식으로 함수 매개변수의 이름이 중요합니다
曾经蜡笔没有小新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