angulaire.js - $scope est-il un paramètre formel ou un paramètre réel lors de la déclaration d'une fonction de contrôleur dans Angular?
世界只因有你
世界只因有你 2017-05-15 16:50:49
0
3
799

Je suis un peu confus quand je suis nouveau sur Angular. Prenez la fonction de contrôleur suivante comme exemple

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

Il s'agit d'une déclaration de fonction, $scope devrait être un paramètre formel, n'est-ce pas ? Mais changer $scope par un autre identifiant tel que s ne fonctionnera pas. On peut voir que $scope est le paramètre réel transmis lorsque la fonction hello est appelée. Mais ces trois lignes de code sont des déclarations de fonctions, alors pourquoi les paramètres réels sont-ils transmis ?

J'ai probablement réalisé que ce n'est pas une déclaration de fonction normale. Peut-être que cela a quelque chose à voir avec le mécanisme de liaison des fonctions du contrôleur d'Angular ? A quoi ça ressemble exactement ?

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

répondre à tous(3)
曾经蜡笔没有小新

Ce type de passage de paramètres pour obtenir des dépendances est une fonctionnalité majeure d'AngularJS - l'une des manifestations de l'injection de dépendances.
Mais pourquoi pouvons-nous obtenir des dépendances en déclarant simplement des paramètres ?

AngularJS utilise $injector pour gérer les requêtes et le chargement dépendants, tels que

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

S'il n'y a pas de déclaration explicite, $injectordéduit la dépendance en fonction du nom du paramètre À ce stade, l'ordre des paramètres n'a aucun sens.
Autrement dit, on peut aussi déclarer ainsi :

angular.module('myApp')
.controller('MyController', ['$scope', 'greeter', function(renamed$scope, renamedGreeter) {
    //do something
}]);
滿天的星座

Eh bien, cette chose n'est qu'une déclaration de fonction là où elle est écrite. L'importance du nom du paramètre formel est entièrement décidée par le lecteur. L'analyseur standard ECMAScript ne pense pas que ce soit important (je suppose), mais Angular. l'a écrit en js. js" analyseur. . . De cette façon, le nom du paramètre de fonction est important

曾经蜡笔没有小新

Portée

L'objet $scope dans AngularJS est là pour convertir le modèle de domaine
Exposé à des vues (modèles). Définissez simplement la propriété sur l'instance de portée et vous pourrez obtenir la valeur lorsque le modèle est rendu.

Les étendues peuvent également étendre les données et les fonctions spécifiques pour des vues spécifiques. Définissez simplement quelques fonctions sur l'instance de portée pour convertir une interface utilisateur spécifique
La logique est exposée au modèle.

Par exemple, vous pouvez créer une méthode getter pour la variable name comme suit :

var HelloCtrl = function ($scope) {  
    $scope.getName = function() {     
        return $scope.name;
   };
}

Ensuite, utilisez-le dans le modèle comme ceci :
<h1>Hello, {{getName()}} !</h1>

$portée
Les objets nous donnent un contrôle très précis sur les parties du modèle qui se trouvent dans ce domaine et sur les opérations disponibles au niveau de la couche de vue. En théorie, les portées AngularJS sont très similaires au modèle MVVM ViewModel.

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal