AngularJS Zwei-Wege-Datenbindung in Verschachtelten Richtlinien

Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen oder möchten, dass ich etwas verdeutlichen. Ich habe versucht eine Menge verschiedener Dinge, um dies herauszufinden, aber habe noch keine Lösung gefunden.

Ich bin relativ neu in angularJS und ich bin versucht, eine Anwendung zu erstellen, mit mehreren Schichten von Daten. Ich habe einige grundlegende Informationen für den Benutzer gespeichert, die in den Geltungsbereich des Körpers auf controller PageController. Dann habe ich eine Einstellungen-Formular geladen, in mit $routeParams (mit controller SettingsController), die enthält eine Reihe von benutzerdefinierten Richtlinien für das templating Zwecke. Da die Richtlinien sind verschachtelte, ich bin mit transklusion zu laden, der zweite innerhalb der ersten. Dies alles scheint zu funktionieren gut.

Mein problem ist, dass ich versuche auf das Feld user.firstname innerhalb der innersten Richtlinie und möchten zwei-Wege-Datenbindung zu ermöglichen, änderungen an der textbox zu bewirken, dass der Wert an der PageController Umfang zu ändern, wie gut. Ich weiß, dass eine Menge von diesen Arten von Problemen verursacht werden durch die Verwendung von primitiven im ng-model, aber ich habe versucht, indem Sie alles in ein extra Objekt so, dass ich trigger prototypal inheritance ohne Erfolg. Was mache ich hier falsch?

Hier ein JSFiddle meinem code, ausgezogen, so viel wie möglich, um das problem einzugrenzen. In diesem Beispiel, wenn ich in dem außerhalb der textbox, die direkt auf der PageController Rahmen, es wird sich ändern, die innere Textfeld, bis das Textfeld geändert wird, auf denen die Verbindung unterbrochen wird. Dies scheint nur wie das problem der Verwendung von primitiven, wie beschrieben, in anderen Fragen, aber ich kann nicht herausfinden, wo das Problem hier ist.

HTML:

<body class="event-listing" ng-app="app" ng-controller="PageController">
    <div class="listing-event-wrap">
        <input type="text" ng-model="user.firstname" />
        <div ng-controller="SettingsController">
            <section block title="{{data.updateInfo.title}}" description="{{data.updateInfo.description}}">
                <div formrow label="{{data.updateInfo.labels.firstname}}" type="textInput" value="user.firstname"></div>
            </section>
        </div>
    </div>
</body>

Winkel-Richtlinien:

app.directive('formrow', function() {
return {
    scope: {
            label: "@label",
            type: "@type",
            value: "=value" 
    },
    replace: true,
    template: '<div class="form-row">' + 
            '<div class="form-label" data-ng-show="label">{{label}}</div>' + 
            '<div class="form-entry" ng-switch on="type">' + 
                '<input type="text" ng-model="value" data-ng-switch-when="textInput" />' + 
            '</div>' + 
        '</div>'
}
});
app.directive('block', function() {
return {
    scope: {
            title: "@title",
            description: "@description" 
    },
    transclude: true,
    replace: true,
    template: '<div class="page-block">' +
            '<h2 data-ng-show="title">{{title}}</h2>' + 
            '<p class="form-description" data-ng-show="description">{{description}}</p>' + 
            '<div class="block-inside" data-ng-transclude></div>' + 
            '</div>'
}
});

Winkel-Controller:

app.controller("PageController", function($scope) {
    $scope.user = {
        firstname: "John"
    };
});
app.controller("SettingsController", function($scope) {
    $scope.data = {
        updateInfo: {
            title: "Update Your Information",
            description: "A description here",
            labels: {
                firstname: "First Name"
            }
        }
    }
});

InformationsquelleAutor princjef | 2013-06-19

Schreibe einen Kommentar