¿Cómo se puede llamar a un método definido en el ámbito secundario desde su ámbito principal?
function ParentCntl() {
// I want to call the $scope.get here
}
function ChildCntl($scope) {
$scope.get = function() {
return "LOL";
}
}
angularjs
angularjs-scope
9azul
fuente
fuente
Respuestas:
Puede usar
$broadcast
de padre a hijo:Violín de trabajo: http://jsfiddle.net/wUPdW/2/
ACTUALIZACIÓN : Hay otra versión, menos acoplada y más comprobable:
Violín: http://jsfiddle.net/uypo360u/
fuente
$scope.$parent
o en$scope.$parent.$parent
, etc.)? Ah, sí: ¡pasa una devolución de llamada en params! :)$emit
de un niño a un padre. Creo que es el momento de actualizar mi respuesta ..$parent
)$broadcast
y puede eliminar el porpingBack
completo.Permítanme sugerirles otra solución:
Menos código y usando herencia prototípica.
Ruido sordo
fuente
$scope.obj.get()
es una función válida.Registre la función del niño en el padre cuando el niño se está inicializando. Usé la notación "como" para mayor claridad en la plantilla.
MODELO
CONTROLADORES
"Pero", dices, "¡
ng-init
no se supone que se use de esta manera !". Bueno si peroDigo que este es un buen uso para él. Si quieres rechazarme, ¡comenta con las razones! :)
Me gusta este enfoque porque mantiene los componentes más modulares. Los únicos enlaces están en la plantilla y significa que
Este enfoque se acerca más a la idea de Tero de modularizar con directivas (nótese que en su ejemplo modularizado,
contestants
se pasa de directiva padre a "hijo" EN LA PLANTILLA).De hecho, otra solución podría ser considerar implementar el
ChildCntl
como una directiva y usar el&
enlace para registrar elinit
método.fuente
Puedes hacer un objeto secundario.
Aquí el niño está probando el destino del método get.
fuente