Domanda

Sto creando una direttiva personalizzata in cui ho bisogno di assegnare la funzione all'interno dell'oggetto che verrà utilizzato durante il passaggio alla mia direttiva.Tuttavia, se passisco il metodo scrivendo il nome diretto della funzione all'interno del modello, funziona bene.Ma se assegnassi che il metodo riferimento a una delle mie proprietà dell'oggetto e poi lo sto usando nel mio modello per passarlo alla direttiva ma non funziona.

Puoi vedere qui - jsfiddle

puoi vedere in console.Fare clic sul pulsante Salva, chiamerà la funzione di salvataggio all'interno della direttiva, ma da lì sto chiamando il metodo del controller che non funziona.Ma se si scrive il nome della funzione blabla invece generacodicitagcode quindi chiamerà ma in quanto non è stato indefinito all'interno di Alert.

Grazie.

È stato utile?

Soluzione

Hai avuto quasi ragione.

Primo errore è stato quando hai definito l'oggetto dynamicMethods che stai facendo riferimento $scope.blabla che non esisteva ancora.

Secondo errore è stato quando si passa i valori per la chiamata della funzione accept che hai legato alla portata principale, è necessario passarlo come:

$scope.accept({msg: "from dir"})
.

DOVE msg è una variabile locale denominata che può essere utilizzata nel valore di espressione dell'attributo accept sulla tua direttiva personalizzata chiamata <editkeyvalue accept="dynamicMethods.myMethod(msg)" ...

Ho aggiornato il tuo violino di conseguenza.

Quando scrivi accept: "&" stai dicendo angolare a

    .
  1. Utilizzare $parse Servizio a Parse Expression (dynamicMethods.myMethod(msg)) "bind" (attraverso chiusura JavaScript ) $scope della funzione restituita dal passaggio 1 all'ambito originale (portata del controller nel tuo caso)
  2. Conservare la funzione all'interno della proprietà accept della tua direttiva scope locale.
  3. Ora se si ispeziona il contenuto di $scope.accept poco prima di chiamarlo nella direttiva, verrai qualcosa di simile a:

    function (locals) {
      return parentGet(parentScope, locals);
    }
    
    .

    Dove locals è un oggetto con variabili locali utilizzate quando il raggiungiamo la valutazione della funzione restituita da $parse. Dal momento che non ci sono parametri denominati in JavaScript e non ci occupiamo in qualche modo che il valore locale della variabile locale msg è "da dir" lo stiamo passando come un semplice oggetto in cui il tasto indica il nome della variabile {msg: "from dir"}.

    Angular Guarderà l'espressione (una stringa) per valutare e scoprire che msg è all'interno delle staffe all'interno, sembra un parametro, quale valore può trovare nell'oggetto locals.

    Quando il momento viene a chiamare la funzione effettiva angolare convertirà l'oggetto locals su Array regolare - Preservare l'ordine dei parametri Leggere dall'espressione e chiamare la funzione in un modo simile a:

    var locals = {msg: "from dir"};
    var targetFn = dynamicMethods.myMethod;
    var context = dynamicMethods;
    targetFn.apply(context, ["from dir"]);
    
    .

    Spero che aiuti un po 'di capire cosa sta succedendo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top