Ich versuche, eine übergeordnete Bereichseigenschaft innerhalb einer Direktive zu ändern.angularjs - Verwenden Sie die Anweisung, um den übergeordneten Bereich zu ändern
Das ist die Struktur dieses Abschnitts meines Projektes (Es hilft zu verstehen, was vor sich geht):
-details
--overview.html
--edit.html
--main.html
-directive
--template.html
--controller.js
Richtlinie/controller.js
restrict: 'E'
scope: {
mode: '@mode',
id: '@id'
},
replace: true,
templateUrl: './directive/template.html',
link: function (scope, element, attrs){
console.log ("link function scope:", scope);
console.log ("Parent Scope:", scope.$parent.$parent.current);
}
Richtlinie/template .html:
<div class="Selector">
<div>
<input type="checkbox" href="#" class="menu-open" name="menu-open" id="menu-open-{{id}}"/>
<label class="menu-open-button" for="menu-open-{{id}}">
<i class="zone-details-current-mode icon-mode-{{mode}}"></i>
<span class="hamburger hamburger-1"></span>
<span class="hamburger hamburger-2"></span>
<span class="hamburger hamburger-3"></span>
</label>
</div>
</div>
Ich nenne die oben genannte Richtlinie von Details/main.html wie unten:
<selector mode="{{current.mode}}" id="{{current.ID}}"></selector>
meines app.js Router-Konfiguration der folgende ist:
.config([
'$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) {
$stateProvider.state('app.details', {
name: 'appDetails',
url: '/:zoneID',
views: {
'appContent': {
templateUrl: './details/main.html',
controller: 'mainController'
}
}
}).state('app.details.overview', {
name: 'appDetailsOverview',
url: '/overview',
views: {
'appContent': {
templateUrl: './details/main.html',
controller: 'mainController'
},
'zone': {
templateUrl: './details/overview.html',
controller: 'mainController'
}
}
}).state('app.details.edit', {
name: 'appDetailsEdit',
url: '/edit/day/:timerEditDay',
views: {
'appContent': {
templateUrl: './details/main.html',
controller: 'mainController'
},
'zone': {
templateUrl: './details/edit.html',
controller: 'mainController'
}
}
});
$urlRouterProvider.otherwise('app/myHouse');
}
]);
Was diese Richtlinie soll in der Lage sein, zu tun ist, den Modus zu ändern, wenn auf eine bestimmte Schaltfläche geklickt wird. Der Modus ist innerhalb scope.current
, aber, um auf scope.current
zuzugreifen, verstehe ich nicht, warum ich zwei $parent
s anhängen muss.
Wenn Sie den Modus ändern, muss der Abschnitt mit dem neuen Modus aktualisiert werden.
Irgendwelche Hilfe dabei? Wie kann ich mit der Anweisung den übergeordneten Bereich ändern? Danke für jede Hilfe und Vorschlag
ok, ich habe das @ -Zeichen mit = für bidirektionale Bindung geändert, aber meine eigentliche Frage war: Warum muss ich den Bereich hinzufügen. $ Parent. $ Parent.current.mode um den Modus zu ändern? sollte es nicht $ parent.current.mode sein? – Nick
es hängt davon ab, ob Sie einige Zwischenebenen, wie eine ng-wenn eine Schicht hätte. Übrigens solltest du das nicht tun, denn mit dem, was ich gepostet habe, brauchst du es nicht mehr. – Walfrat
Ich lese über $ watch ... brauche ich es nicht für den $ watch Ausdruck? – Nick