data - windows document javascript




Aggiorna la variabile dell'ambito genitore in angolare (4)

Ho due controller uno avvolto all'interno di un altro. Ora so che l'ambito figlio eredita le proprietà dall'ambito genitore, ma esiste un modo per aggiornare la variabile dell'ambito genitore? Finora non ho trovato nessuna soluzione ovvia.

Nella mia situazione ho un controller di calendario all'interno di un modulo. Vorrei aggiornare le date di inizio e di fine dall'ambito principale (che è il modulo) in modo che il modulo abbia le date di inizio e di fine quando vengono inviate.


C'è un altro modo per fare questa operazione e non usare la variabile $scope.$parent .

Basta preparare un metodo per modificare il valore nell'oscilloscopio genitore e usarlo in child one. Come questo:

app.controller('ctrlParent',function($scope) {
  $scope.simpleValue = 'x';
  $scope.changeSimpleValue = function(newVal) {
    $scope.simpleValue = newVal;
  };
});

app.controller('ctrlChild',function($scope){
    $scope.changeSimpleValue('y');
});

Funziona anche e ti dà un maggiore controllo sulle variazioni di valore.

Puoi anche chiamare il metodo anche in HTML come: <a ng-click="changeSimpleValue('y')" href="#">click me!</a> .


Funziona anche (ma non sono sicuro che ciò avvenga nel rispetto delle migliori pratiche o no)

app.controller('ctrlParent',function($scope) {
    $scope.simpleValue = 'x';
});

app.controller('ctrlChild',function($scope){
    $scope.$parent.simpleValue = 'y';
});

Quando assegni un attributo primitivo a un ambito, esso è sempre locale all'ambito (probabilmente creato al volo), anche se un ambito genitore ha un attributo con lo stesso nome. Questa è una decisione di progettazione e una buona IMHO.

Se è necessario modificare alcuni primitivi (int, booleani, stringhe) nell'ambito genitore, dalla vista, è necessario che sia un attributo di un altro oggetto in tale ambito, pertanto l'assegnazione potrebbe contenere:

<a ng-click="viewData.myAttr = 4">Click me!</a>

e lo farà, a sua volta:

  1. ottenere l'oggetto viewData da qualsiasi ambito in cui è definito
  2. assegna 4 al suo attributo myAttr .

È necessario utilizzare un oggetto (non una primitiva) nell'ambito genitore e quindi sarà possibile aggiornarlo direttamente dall'ambito figlio

Genitore:

app.controller('ctrlParent',function($scope){
    $scope.parentprimitive = "someprimitive";
    $scope.parentobj = {};
    $scope.parentobj.parentproperty = "someproperty";
});

Bambino:

app.controller('ctrlChild',function($scope){
    $scope.parentprimitive = "this will NOT modify the parent"; //new child scope variable
    $scope.parentobj.parentproperty = "this WILL modify the parent";
});

Demo funzionante : http://jsfiddle.net/sh0ber/xxNxj/

Vedi Quali sono le sfumature dell'eredità prototipo / prototipo dell'oscilloscopio in AngularJS?







angularjs-scope