2016-04-29 5 views
3

kann nicht festgelegt werden. Ich versuche, eine gebundene Eigenschaft für eine Winkelkomponente zu implementieren, wie in den Artikeln component documentation und this example erläutert.Der Wert der gebundenen Eigenschaft in der Winkelkomponente

Leider werden die Werte, die ich auf der Tag-Ebene oder in den $onInit Methoden zuweisen, nie verwendet. Der Wert wird auch nicht gedruckt, wenn ich ihn als Modellwert verwende.

Sie können die full code on plunker finden.

Meine verbindliche Definition:

(function(angular) { 
    'use strict'; 

    function SearchResultController($scope, $element, $attrs) { 
    var ctrl = this; 
    ctrl.searchFor = 'nohting-ctor'; 

    ctrl.$onInit = function() { 
     console.log('SearchResultController.$onInit: searchFor='+ctrl.searchFor); 
     ctrl.searchFor = 'nothing-int'; 
    }; 

    } 

    angular.module('myApp').component('searchResult', { 
    templateUrl: 'searchResult.html', 
    controller: SearchResultController, 
    bindings: { 
     searchFor: '<' 
    } 
    }); 
})(window.angular); 

Vorlage:

<p>SearchResult for <span ng-model="$ctrl.searchFor"</span></span></p> 

Wie es verwendet:

<h1>Main Window</h1> 
<search-input on-start-search="$ctrl.startSearch(value)"></search-input> 
<search-result search-for="nothing-ext"></search-result> 

Keine der nothing-* Werte ist evers gezeigt.

Irgendwelche Ideen, was ist los?

Antwort

2

Die Verwendung Ihrer Komponente ist nicht korrekt. Wenn Sie eine Zeichenfolge übergeben wollen, sollten sie zitiert werden:

<search-result search-for="'nothing-ext'"></search-result> 

Dann nächste Problem ist, dass diese Linie

<p>SearchResult for <span ng-model="$ctrl.searchFor"</span></span></p> 

keinen Sinn macht, als ngModel Richtlinie für Eingangskontrollen nur gültig ist. Sie wollen ngBind oder einfach {{ $ctrl.searchFor }}:

<p>SearchResult for <span ng-bind="$ctrl.searchFor"</span></span></p> 
+0

Vielen Dank. Habe meinen Tag gerettet! Gibt es eine Erklärung über die erwartete Syntax, die in den Wert der gebundenen Eigenschaften eingehen muss? – BetaRide

+0

Ich sicher, dass Sie etwas in der Dokumentation finden können. Ich kann es jedoch in einfachen Worten erklären. Sie haben also 3 Arten von Bindungen und 2 Arten von was Sie als Attributwert schreiben können. Bindings: '=' bidirektionale Bindung - akzeptiert und Ausdruck, der Wert sollte wie normaler JS-Code aussehen. Deshalb können Sie '{{}}' nicht als '= Ausdruck schreiben, weil es kein gültiger JS ist. 'test: '@'' - Der Wert muss eine Zeichenkette sein: 'test = '' inquited string '" 'oder' test = "{{someExpression}}" 'weil nach der Analyse und Auswertung der Vorlage' {{someExpression}} 'wird in string erweitert, wie' ''some string'" '. – dfsq

+0

'test: '&'' binding erwartet, dass der Wert etwas ist, das aufgerufen werden kann (als ob es eine Funktion wäre) oder grundsätzlich an 'eval' übergeben wird. Wenn Sie also mit '=' (oder '<') arbeiten, müssen Sie den Wert des Attributs als gültigen JS-Ausdruck angeben. Beispiele für gültige Ausdrücke (wie in JS): 'someObj',' 'some string'',' someObj.prop'. Beispiel für ungültige Ausdrücke: '{{something}}', 'some/path.html' (deshalb müssen Sie in ngInclude den Pfad angeben, wenn es sich um eine statische Zeichenfolge handelt). – dfsq

Verwandte Themen