Myślę najprostszą/najczystszych odpowiedź nie została jeszcze zawarte na to pytanie. Ta odpowiedź pasuje również w HTML5 Spec dla atrybutu Boolean - http://www.w3.org/TR/html5/infrastructure.html#boolean-attributes
2.5.2 Boolean atrybuty
Szereg atrybuty boolean atrybuty.Obecność atrybutu boolean na elemencie reprezentuje wartość true, a brak atrybutu reprezentuje wartość false.
Jeśli atrybut jest obecny, jego wartość musi być albo pusta struna lub wartość, która jest ASCII wielkości liter pasuje do nazwy kanonicznej atrybutu , bez prowadzącego lub końcowe białe znaki.
Wartości "true" i "false" nie są dozwolone dla atrybutów boolean. Aby reprezentować fałszywą wartość, należy całkowicie pominąć atrybut .
HTML:
<city-zip city="clientCity" zip="clientZip" requiredParam></city-zip>
I dyrektywy:
.directive('cityZip', function() {
return {
restrict: 'E',
templateUrl: '../templates/templateCityZip.html',
scope: {
city: '=',
zip: '='
},
controller: function($scope, $attrs) {
$scope.requiredParamExists = $attrs.hasOwnProperty('requiredParam');
}
}
});
Prosty, pasuje czysto z HTML5 spec logicznych atrybuty i bez konieczności zmuszenia ciąg do zmiennej Zakres ('requiredParam': '='
).
Uwaga w powyższym przykładowym kodzie, jeśli zostanie minified, wymagane zmienne $scope
i $attrs
zostaną zmienione na krótszy ciąg znaków i złamany kod, ale jest to kolejny problem.
Po prostu utwórz zmienną zakresu, aby to sprawdzić. Nie trzeba przekazywać jako ciąg. Powinieneś przekazać jako zmienną – Fals