Ich habe über ein Thema kommen und schuf eine JSFiddle to demonstrateAngualrJS: Warum ist der Komponentenumfang nicht bindend?
var myApp = angular.module("myApp", []);
myApp.component("bar", {
transclude: true,
template: '<div ng-transclude></div>',
controller: function ($scope, $element, $attrs) {
$scope.msg = "Hello";
setTimeout(function(){
$scope.msg = "Goodbye";
alert($scope.msg);
}, 3000)
}
});
HTML:
<body ng-app="myApp">
<bar>
{{ $parent.msg }}
</bar>
</body>
Wie Sie Ich habe einen Umfang Variable (msg), dass ich, nachdem ich einige Arbeit bin Aktualisierung sehen (setTimeout in diesem Fall). Im HTML scheint es nur eine unidirektionale Bindung zu geben, da "Goodbye" nie auf die Ansicht gerendert wird, wenn der Bereich der Komponente aktualisiert wird.
Bin ich richtig, $parent
zu verwenden? Habe ich mein Ziel falsch verstanden? Bearbeite ich die Transkription richtig?
bearbeiten
soll ich sagen, dass setTimeout
nur ein Beispiel ist, in meinem realen Welt Fall, dass ich für Komponenten http://www.createjs.com/ hinzufügen versuchen Statt setTimeout
ich tatsächlich wurde das Hinzufügen eines ‚vollständig‘ Ereignis-Listener eines PreLoadJS LoadQueue
http://www.createjs.com/docs/preloadjs/classes/LoadQueue.html
Danke für die schnellen Antworten - SetTimeout wurde nur ein Beispiel, die ich in meinem realen Fall ein Ereignis-Listener bin das Hinzufügen, aber ich denke, das gleiche gilt, es ist ein nicht-eckiger Kontext. Ich werde meine Frage bearbeiten, um mehr Details über meinen tatsächlichen Fall hinzuzufügen. –
Gibt es eine Möglichkeit, einen Angular-Kontext zu übergeben, wenn mit einer nicht-eckigen Bibliothek gearbeitet wird? –
Verwenden Sie '$ scope. $ Apply()' beim Aktualisieren des Bereichs außerhalb – charlietfl