angular.js - Angular中控制器函数声明时的$scope到底是形参还是实参?
世界只因有你
世界只因有你 2017-05-15 16:50:49
0
3
776

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

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

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

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

世界只因有你
世界只因有你

모든 응답(3)
曾经蜡笔没有小新

이런 종류의 매개변수 전달을 통해 종속성을 얻는 것은 종속성 주입의 표현 중 하나인 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매개변수 이름을 기준으로 종속성을 추론
합니다. 이때 매개변수의 순서는 의미가 없습니다.

즉, 다음과 같이 선언할 수도 있습니다.🎜 으아아아
滿天的星座

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

曾经蜡笔没有小新

범위

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

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

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

으아아아

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

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

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

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿