J'ai beaucoup lu sur l'utilisation de ces symboles dans l'implémentation de directives personnalisées dans AngularJS mais le concept n'est toujours pas clair pour moi. Je veux dire, qu'est-ce que cela signifie si j'utilise l'une des valeurs de portée de la directive personnalisée?
var mainApp = angular.module("mainApp", []);
mainApp.directive('modalView',function(){
return{
restrict:'E',
scope:'@' OR scope:'&' OR scope:'=' OR scope:'>' OR scope:true
}
});
Que faisons-nous exactement avec la portée ici?
Je ne sais pas non plus si "scope: '>'" existe ou non dans la documentation officielle. Il a été utilisé dans mon projet.
Modifier-1
L'utilisation de "scope: '>'" était un problème dans mon projet et il a été corrigé.
@?
?<
non seulement compatible avec les composants de la version 1.5, il est également compatible avec les directives. @Homer le?
désigne l'attribut comme facultatif .>
ne figure pas dans la documentation.<
est pour la liaison unidirectionnelle.@
la liaison sert à passer des chaînes. Ces chaînes prennent en charge les{{}}
expressions pour les valeurs interpolées.=
la liaison est pour la liaison de modèle bidirectionnelle. Le modèle dans la portée parent est lié au modèle dans la portée isolée de la directive.&
binding est pour passer une méthode dans la portée de votre directive afin qu'elle puisse être appelée dans votre directive.Lorsque nous définissons scope: true dans la directive, Angular js créera une nouvelle portée pour cette directive. Cela signifie que toute modification apportée à la portée de la directive ne sera pas reflétée dans le contrôleur parent.
la source
<
liaison unidirectionnelle=
liaison bidirectionnelle&
liaison de fonction@
passer uniquement des chaînesla source
Lorsque nous créons une directive client, la portée de la directive pourrait être dans une portée isolée, cela signifie que la directive ne partage pas une portée avec le responsable du traitement; la directive et le contrôleur ont leur propre champ d'application. Cependant, les données peuvent être transmises au champ d'application de la directive de trois manières possibles.
@
littéral de chaîne, passer la valeur de chaîne, liaison à sens unique.=
chaîne littérale, passer l'objet, liaison de 2 manières.&
littéral de chaîne, appelle une fonction externe, peut transmettre des données de la directive au contrôleur.la source
La documentation AngularJS sur les directives est assez bien écrite pour ce que signifient les symboles.
Pour être clair, vous ne pouvez pas simplement avoir
dans une définition directive. Vous devez avoir des propriétés pour lesquelles ces liaisons s'appliquent, comme dans:
Je vous suggère fortement de lire la documentation et les tutoriels sur le site. Vous devez connaître beaucoup plus d'informations sur les étendues isolées et d'autres sujets.
Voici une citation directe de la page liée ci-dessus, concernant les valeurs de
scope
:Récupéré le 13/02/2017 sur https://code.angularjs.org/1.4.11/docs/api/ng/service/ $ compile # -scope-, sous licence CC-by-SA 3.0
la source
J'ai eu du mal à lier une valeur avec l'un des symboles dans AngularJS 1.6. Je n'ai obtenu aucune valeur du tout, seulement
undefined
, même si je l'ai fait exactement de la même manière que d'autres liaisons dans le même fichier qui fonctionnaient.Le problème était: mon nom de variable avait un trait de soulignement.
Cela échoue:
Cela marche:
(Pas complètement lié à la question d'origine, mais c'était l'un des meilleurs résultats de recherche lorsque j'ai regardé, alors j'espère que cela aide quelqu'un avec le même problème.)
la source