Я не могу получить jquery resizable для работы с Angular и ng-style. Я понимаю, что я должен указывать высоту и ширину при создании изменяемого размера элемента, но, как вы можете видеть из приведенного ниже jsfiddle, любой ng-стиль, кажется, игнорируется, и нет никакой высоты или ширины.
<div ng-controller="myCtrl">
<img resizable src="http://lorempixel.com/400/200/"
ng-style="{'width':'400px', 'height':'200px'}"/>
</div>
http://jsfiddle.net/85my1qbc/3/
Если, однако, я заменяю стиль ng стилем, он отлично работает (как показано ниже)
<div ng-controller="myCtrl">
<img resizable src="http://lorempixel.com/400/200/"
style="width:400px;height:200px"/>
</div>
http://jsfiddle.net/go1qak0w/1/
Любая идея, как я могу обойти это?
Передайте ngStyle в свою директиву и установите css в директиве.
app.directive('resizable', function () {
return {
restrict: 'A',
scope: {
callback: '&onResize',
ngStyle : '=ngStyle'
},
link: function postLink(scope, elem, attrs) {
elem.css(scope.ngStyle);
elem.resizable();
elem.on('resizestop', function (evt, ui) {
if (scope.callback) { scope.callback(); }
});
}
};
});
Причина. Когда переменная с изменяемой директивой компилируется, ширина и высота элемента равны нулю. Вы можете проверить это, вызвав elem.css('width') в директиве resizable.
Обычно значением ng-стиля будет переменная scope $scope.myStyle = {'width':'400px', 'height':'200px'}
и вы можете использовать переменную в ngStyle
<div ng-controller="myCtrl">
<img resizable src="http://lorempixel.com/400/200/" ng-style="myStyle"/>
</div>
Ссылка: ngStyle