初学Angular遇到了点困惑,以下面这个控制器函数为例
function hello($scope) { $scope.name = '张三' }
这是个函数声明,$scope理应是形参吧?可是把$scope改为其他标识符如s就不行了。可见$scope是hello函数被调用时传入的实参。但这三行代码是函数的声明,怎么就传入实参了呢?
我大概意识到了这不是一个正常的函数声明,可能与Angular的控制器函数的绑定机制有关系?具体是怎样的?
이런 종류의 매개변수 전달을 통해 종속성을 얻는 것은 종속성 주입의 표현 중 하나인 AngularJS의 주요 기능입니다. 그런데 왜 매개변수 선언만으로 종속성을 얻을 수 있나요?
AngularJS는 $injector를 사용하여 $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는 매개변수 이름을 기준으로 종속성을 추론 합니다. 이때 매개변수의 순서는 의미가 없습니다.
글쎄요, 이건 그냥 함수 선언으로 작성한 것입니다. 형식 매개변수의 이름이 중요한지 여부는 전적으로 독자가 결정합니다. ECMAScript 표준 파서는 중요하다고 생각하지 않지만(아마도) Angular는 js를 사용했습니다. "js" 파서를 작성했습니다. . . 이런 식으로 함수 매개변수의 이름이 중요합니다
범위 여기에서는 AngularJS의 $scope 객체를 사용하여 도메인 모델을 변환합니다 뷰(템플릿)에 노출됩니다. 속성을 범위 인스턴스로 설정하면 템플릿이 렌더링될 때 값을 얻을 수 있습니다. 스코프는 특정 보기에 대한 데이터 및 특정 기능을 확장할 수도 있습니다. 특정 UI를 변환하려면 범위 인스턴스에 일부 함수를 정의하기만 하면 됩니다 논리가 템플릿에 노출됩니다. 예를 들어 다음과 같이 name 변수에 대한 getter 메서드를 만들 수 있습니다. 으아아아 그런 다음 템플릿에서 다음과 같이 사용하세요. <h1>Hello, {{getName()}} !</h1> $스코프 객체를 사용하면 모델의 어느 부분이 이 도메인 내에 있는지, 그리고 뷰 레이어에서 어떤 작업을 사용할 수 있는지 매우 정확하게 제어할 수 있습니다. 이론적으로 AngularJS 범위는 MVVM 패턴 ViewModel과 매우 유사합니다.
범위
여기에서는 AngularJS의 $scope 객체를 사용하여 도메인 모델을 변환합니다 뷰(템플릿)에 노출됩니다. 속성을 범위 인스턴스로 설정하면 템플릿이 렌더링될 때 값을 얻을 수 있습니다.
스코프는 특정 보기에 대한 데이터 및 특정 기능을 확장할 수도 있습니다. 특정 UI를 변환하려면 범위 인스턴스에 일부 함수를 정의하기만 하면 됩니다 논리가 템플릿에 노출됩니다.
예를 들어 다음과 같이 name 변수에 대한 getter 메서드를 만들 수 있습니다.
그런 다음 템플릿에서 다음과 같이 사용하세요. <h1>Hello, {{getName()}} !</h1>
<h1>Hello, {{getName()}} !</h1>
$스코프 객체를 사용하면 모델의 어느 부분이 이 도메인 내에 있는지, 그리고 뷰 레이어에서 어떤 작업을 사용할 수 있는지 매우 정확하게 제어할 수 있습니다. 이론적으로 AngularJS 범위는 MVVM 패턴 ViewModel과 매우 유사합니다.
http://note.sdo.com/u/635412003927148913/n/s6cBN~lcIHwG4M1-Y000LW
이런 종류의 매개변수 전달을 통해 종속성을 얻는 것은 종속성 주입의 표현 중 하나인 AngularJS의 주요 기능입니다.
그런데 왜 매개변수 선언만으로 종속성을 얻을 수 있나요?
AngularJS는
$injector
를 사용하여$injector
管理依赖的查询与加载,比如如果没有显示声明,
즉, 다음과 같이 선언할 수도 있습니다.🎜 으아아아$injector
와 같은 종속 쿼리 및 로딩을 관리합니다. 으아아아 명시적인 선언이 없으면$injector
는 매개변수 이름을 기준으로 종속성을 추론합니다. 이때 매개변수의 순서는 의미가 없습니다.
글쎄요, 이건 그냥 함수 선언으로 작성한 것입니다. 형식 매개변수의 이름이 중요한지 여부는 전적으로 독자가 결정합니다. ECMAScript 표준 파서는 중요하다고 생각하지 않지만(아마도) Angular는 js를 사용했습니다. "js" 파서를 작성했습니다. . . 이런 식으로 함수 매개변수의 이름이 중요합니다
http://note.sdo.com/u/635412003927148913/n/s6cBN~lcIHwG4M1-Y000LW