2016-06-15 9 views
1

すべてはcomponentである必要があります。ディレクティブ(コンポーネント)からボタングループを作成する

ドメインオブジェクトを編集/削除/表示するためのボタンコンポーネントをいくつか定義します。例として:

angular.module('xxx').component('editButton', { 
    bindings: {domainObject: '<'}, 
    template: '<button class="btn btn-default" ng-click="$ctrl.displayEditForm()">Edit</button>' 
    controller: /* ... */ 
}); 

そして、私はそれを使用する:

<edit-button domain-object="$ctrl.myDomainObject"></edit-button> 

は素晴らしい作品!

私のボタンはコンポーネント定義に包まれているので、もちろん、ブートストラップによって正しく表示されない
<div class="btn-group"> 
    <edit-button domain-object="object"></edit-button> 
    <delete-button domain-object="object"></delete-button> 
</div> 

:私は、特定のマークアップ(たとえば、button group)を必要とするときしかし、私はそれをやろうとしています。

replace functionality is deprecatedを念頭に置いて、この問題を解決する方法を知りたいですか?

+0

を使用しないように

template: '<div class="btn-group"><button class="btn btn-default" ng-click="$ctrl.displayEditForm()">Edit</button>'...etc. 

さて、あなただけのブートストラップのスタイルを上書きすることができます抽象的な理想的なコンポーネントについて - それは独自のCSSを持っている必要があります。 現実世界について話しても、角度1.5の指示文が必要です。 角度2では、要素だけでなく要素もHTML属性に一致させることができます。 –

+0

したがって、@Component({selector: '[my-component]'}) 'をAngular 2で作成することはできますか?これは本当に問題を解決するだろう!答えとして投稿できますか? – fracz

+0

[属性ディレクティブ](https://angular.io/docs/ts/latest/guide/attribute-directives.html)が見つかりました。彼らはAngular 2の問題を解決するでしょう.1.5に関しては、その解決策は 'deprecation'や' restrict: 'A''のディレクティブにもかかわらず 'replace'を使うことです。とても簡単! – fracz

答えて

1

コンポーネントが必ずしもhtml要素であるとは限りません。それは可能です(そして多くの場合、html要素のグループです)

あなたのコンポーネントテンプレートには、周囲のdiv btn-groupが含まれている必要があります。あなたは個別のボタンを再利用したい場合は、話をした場合、彼らは「>」

.your-page .btn-group .btn:first-child:not(:last-child):not(.dropdown-toggle) { 
    border-top-right-radius: 0; 
    border-bottom-right-radius: 0; 
} 

代わりの

.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle) { 
     border-top-right-radius: 0; 
     border-bottom-right-radius: 0; 
} 
+0

SRP(コンポーネントのメリット)に違反するため、すべてのボタンが1つのコンポーネントに含まれないようにしたい。ブートストラップからCSSコードを複製することも完璧なソリューションとは限りません(あなたが提案するものよりもコピー&ペーストする方が多いと思います)。それにもかかわらず、あなたのアイデアは何とか*問題を解決します、ありがとうございます。 – fracz

+0

コンポーネントベースのアプリケーションでは、多くの要素と他の子コンポーネントを含むコンポーネントが間違いなくあります。 (角度の文書のヒーローリストの例を参照してください)私はあなたがSRP理論を極端に進めていると思います。ここでコンポーネントには、オブジェクトの状態を制御する責任があります。 – gyc

+0

もちろん、コンポーネントは階層を作成できます。しかし、 'my-button-group'コンポーネントの唯一の責任は、' edit-button'や 'delete-button'のような特殊なコンポーネントをグループ化することです。 'my-button-group'コンポーネントがオブジェクトの編集や削除の詳細を気にしなければならない場合、その新しいボタンが追加されるたびにコードが大きくなります。これは確かにひどく設計されたコンポーネントです。 – fracz

関連する問題