AngularJSコンポーネントのコンセプトを頭で包み込み、原理を理解し始めましたが、実際に試してみると、どのように実装するのか分かりませんコンポーネントと一緒に。AngularJS 1.5コンポーネントのDOM操作
リニアプログレスバーを実装する必要があります。テンプレートがあるため、論理的にはディレクティブではなくコンポーネントにする必要がありますが、コンポーネントでDOM操作を行う方法が見つからず、内部にディレクティブそのような小さなコンポーネント。ここでディレクティブの基本的な実装です:
JS
angular.module('test', [])
.controller('MainCtrl', function($q, $scope) {
$scope.curVal= 0;
$scope.maxVal = 100;
})
.directive('progressBar', [function() {
return {
restrict: 'E',
scope: {
curVal: '@',
maxVal: '@'
},
template: "<div class='progress-bar'>"+
"<div class='progress-bar-bar'>testing</div>"+
"</div>",
link: function ($scope, element, attrs) {
function updateProgress() {
var progress = 0;
if ($scope.maxVal) {
progress = Math.min($scope.curVal, $scope.maxVal)/$scope.maxVal * element.find('.progress-bar').width();
}
element.find('.progress-bar-bar').css('width', progress);
}
$scope.$watch('curVal', updateProgress);
$scope.$watch('maxVal', updateProgress);
}
};
}]);
HTML
<progress-bar cur-val='{{curVal}}' max-val='{{maxVal}}'>
CSS
.progress-bar {
width: 120px;
height: 18px;
border-style: solid;
border-width: 1px;
background-color: rgba(100,50,100,.60);
border-color: #aaa;
}
.progress-bar-bar {
width: 0px;
background-color: rgb(100,50,100);
height: 100%;
color: #fff;
font-weight: normal
}
だから、コンポーネントの原則を間違って理解していたのかもしれませんが、私は本当に面白いと思っていました。
私の質問は次のとおりです。何らかの方法でコンポーネントのDOMを操作できますか?答えがいいえの場合、コンポーネントでこのディレクティブを実装する方法は何ですか(そして、それはまったく適切ですか)。 CSSを変更するためにコンポーネントに指示を追加するのが適切な選択だとは思わないので、私は固執しています。
'ng-style'を使用した場合、DOM操作やあなたのリンクのjsは必要ありません – charlietfl
@charlietfl oops、実際にng-styleを使用してそこに値を渡すように見えます。 、ありがとう、私はあなたが答えとしてそれを投稿することができると思います – kemsbe
あなたの指示を仕事にする必要がありますか、新しいコンポーネントのアプローチが必要ですか?チェックされた答えは命令のままであり、質問に答えません。 –