Ich habe eine Direktive, die ein Array akzeptiert. Es ist zunächst undefiniert und wird dann zu einem bestimmten Zeitpunkt asynchron definiert.
Die Richtlinie sieht ähnlich aus wie
function XYZDirective() {
return {
restrict: 'EA',
replace: true,
scope: {
array: '='
},
controller: ['$scope', $scope => {
$scope.$watch(() => $scope.array, (newValue, oldValue) => {
$scope.firstElement = (newValue && newValue.length > 0)
? newValue[0]
: null;
});
}],
templateUrl: URL
};
}
Dies funktioniert gut. Ich wollte dann für die $watch
loswerden und einfache Bindung verwenden.
function XYZDirective() {
return {
restrict: 'EA',
replace: true,
scope: {
array: '='
},
controller: ['$scope', $scope => {
$scope.getFirstElement = function() {
return ($scope.array && $scope.array.length > 0) ? $scope.array[0] : null;
}
$scope.firstElement = $scope.getFirstElement();
}],
templateUrl: URL
};
}
Ich würde erwarten, $scope.firstElement
zu bekommen jedes Mal $scope.array
Änderungen neu bewertet.
Dies funktioniert jedoch nicht. Wenn ich einen Beobachter auf $scope.array
hinzufügen kann ich sehen, es aktualisiert wird, aber die Änderung propagiert nicht zu $scope.firstElement