Ich muss ein Root-Scope-Attribut innerhalb eines Callback innerhalb einer Direktive ändern. Aber die Richtlinie liegt in einem inneren Bereich, der durch eine switch-Direktive geschaffen wurde.So ändern Sie den Bereich innerhalb einer Direktive in AngularJs
HTML
<div ng-app="app" ng-controller='AppController'>
<p>Selected: {{ selected }}</p>
<div ng-switch on="selected">
<div ng-switch-default>
<p>Item: {{ selected }}</p>
<custom-tag selected-item="selected" />
</div>
<div ng-switch-when="New value">
<p>Worked</p>
</div>
</div>
</div>
JavaScript
angular.module('app', [])
.directive("customTag", [function() {
return {
restrict: "E",
replace: true,
template: "<input type='button' value='Click me' />",
link: function (scope, element, attrs) {
element.bind('click', function() {
scope[attrs.selectedItem] = "New value";
scope.$apply();
});
}
};
}]);
function AppController($scope) {
$scope.selected = 'Old value';
}
Fiddle: http://jsfiddle.net/nJ7FQ/
Mein Ziel ist es, "Neuer Wert" im ausgewählten Bereich angezeigt werden soll. Wie kann ich erreichen, was ich versuche zu tun? Was mache ich falsch?
Außerdem, wie ich versuche, eine Komponente zu machen. Gibt es eine Möglichkeit, dasselbe zu tun, aber mit einem isolierten Umfang?
Ich mochte besser Ihre erste Lösung (http://jsfiddle.net/nJ7FQ/2/) Es scheint irgendwie sauberer. Aber warum sollte ich $ parent.selected verwenden, wenn Child Scopes nach meinem Verständnis alle Eigenschaften des Parents erbt? – Fernando
Nun, wenn Sie das ausgewählte Element für das vererbte Element ändern, wird die ausgewählte Variable des übergeordneten Bereichs nicht geändert, indem Sie zum übergeordneten Element wechseln und die Variable für dieses Element ändern. Wenn der untergeordnete Wert gelesen wird, wird das Element angezeigt Elternteil. Wenn Sie die ausgewählte Eigenschaft des untergeordneten Bereichs ändern, wird sie zu einer neuen Eigenschaft im untergeordneten Bereich und nicht mehr erben. (Ich weiß, es ist verwirrend) Dies ist JavaScript-Prototyp Erbe, wenn Sie Google es wollen. – shaunhusain
Es ist vollkommen klar! Danke vielmals. – Fernando