2014-01-27 10 views
6

Ich habe folgende HauptansichtAngularJS - ng-umfassen ng-Controller und den Umfang nicht verbindlich

<div ng-include="'otions.html'"></div> 

und options.html hat folgende

<div ng-controller="OptionsController">Options</div> 
<input type="text" ng-model="keyword" value="{{keyword}}" /> 
<button ng-click="search()">Search</button> 

Aber "Schlüsselwort" ist nicht verbindlich zu der Bereich in OptionsController.

app.controller('OptionsController', 
       ['$scope', function($scope) { 

    $scope.keyword = "all"; 
    $scope.search = function() { 
    console.log("hello") 
    }; 

}]); 

, wenn ich auf den Button klicken, sehe ich nicht hello und das Schlüsselwort all im Eingabetext wird nicht angezeigt.

Ich habe versucht, das Teil ng-Controller bewegt, wie

<div ng-controller="OptionsController" ng-include="'otions.html'"></div> 

folgt Und die Dinge funktionieren wie erwartet.

Ich lese die Antworten in AngularJS - losing scope when using ng-include - und ich denke, mein Problem ist verwandt, aber brauchen nur noch mehr Erklärung zu verstehen, was vor sich geht.

+0

Nicht sicher, ob es ein Tippfehler ist hier aber auch in Ihrer Quelle: die Datei, die Sie einschließen, ist Verweise als 'otions.html' statt' options.html' – thomaux

+0

In Ihrem source Sie geben ng-controller nur für das erste "div" an, so dass Ihre Eingabe und Schaltfläche nicht im Bereich Ihres Controllers liegen. Wahrscheinlich ist es ein Tippfehler. Wenn nicht, könnte das ein Grund sein. – GRaAL

+0

oh nein. wie dumm von mir. – ericbae

Antwort

6

sollten Sie schreiben options.html wie folgt aus:

<div ng-controller="OptionsController">Options 
<input type="text" ng-model="keyword" value="{{keyword}}" /> 
<button ng-click="search()">Search</button> 
</div> 

OptionsController im äußeren html-Element gesetzt werden sollte.

+0

Guter Fang, das habe ich vermisst. In der ursprünglichen HTML-Eingabe außerhalb des div mit dem Controller markiert, so dass die Scope-Variable nicht existiert. –

0

i Gesicht gleiche Problem haben,

Unter Haupt Tag wird es funktionieren, aber, wenn einige Daten binden an nav.html es nicht funktioniert.

finden den Link

AngularJS - losing scope when using ng-include

innerhalb seiner Arbeit Kind-Bereich umfassen. bessere Option zum Erstellen von benutzerdefinierten Richtlinie seine einfache Lösung

Verwandte Themen