Po prostu napotkałem ten problem i napisałem kroplę w rozwiązaniu. Możesz napisać dyrektywę niestandardową złożoną z kontenera, przycisku i elementu wejściowego z plikiem tekstowym. Za pomocą CSS umieszczasz dane wejściowe nad przyciskiem niestandardowym, ale z oporem 0. Ustawiasz wysokość i szerokość kontenera dokładnie na szerokość i wysokość przesunięcia, a wysokość i szerokość wejścia na 100%.
dyrektywa
angular.module('myCoolApp')
.directive('fileButton', function() {
return {
templateUrl: 'components/directives/fileButton/fileButton.html',
restrict: 'E',
link: function (scope, element, attributes) {
var container = angular.element('.file-upload-container');
var button = angular.element('.file-upload-button');
container.css({
position: 'relative',
overflow: 'hidden',
width: button.offsetWidth,
height: button.offsetHeight
})
}
};
});
szablon jade jeśli używasz Jade
div(class="file-upload-container")
button(class="file-upload-button") +
input#file-upload(class="file-upload-input", type='file', onchange="doSomethingWhenFileIsSelected()")
tego samego szablonu w html jeśli używasz html
<div class="file-upload-container">
<button class="file-upload-button"></button>
<input class="file-upload-input" id="file-upload" type="file" onchange="doSomethingWhenFileIsSelected()" />
</div>
CSS
.file-upload-button {
margin-top: 40px;
padding: 30px;
border: 1px solid black;
height: 100px;
width: 100px;
background: transparent;
font-size: 66px;
padding-top: 0px;
border-radius: 5px;
border: 2px solid rgb(255, 228, 0);
color: rgb(255, 228, 0);
}
.file-upload-input {
position: absolute;
top: 0;
left: 0;
z-index: 2;
width: 100%;
height: 100%;
opacity: 0;
cursor: pointer;
}
Prawdopodobnie chcesz uwzględnić rzeczywisty javascript tutaj i dane wyjściowe z jade zamiast wstępnie przetworzonego kodu, ponieważ więcej osób będzie w stanie Ci pomóc. Zwykle oznacza to, że wywołałeś $ scope. $ Apply() w funkcji wywoływanej podczas $ scope. $ Apply() – shaunhusain
Również to wydaje się generalnie złe, chociaż nie manipulujesz DOM nawet przy założeniu, że jakiś element jest tam po imieniu bez użycia dyrektyw, jako waszych środków do enkapsulacji, że logika nie jest dobra. – shaunhusain
Jest to dość standardowy sposób wprowadzania stylu plików, ukrywając rzeczywistą i uruchamiając kliknięcie na inną metodę. Problem polega na tym, że kątowy zgłasza błąd, ponieważ ma zastosowanie w przypadku zastosowania – mcfedr