私はAngularJS 1.5の新しいコンポーネントでウィジェットのセットを作成しています。問題は、同じウィジェットを複数回使用すると、何らかの形でコントローラまたはスコープを共有することです。コンポーネントのことの一つが、そのスコープが完全に分離されていると思ったのですか?ビューで同じAngularJS 1.5コンポーネントを複数回正しく使用する方法はありますか?
<widget-list
title="Books"
class="col-xs-12 col-md-4">
</widget-list>
<widget-list
title="Movies"
class="col-xs-12 col-md-4">
</widget-list>
<widget-list
title="Albums"
class="col-xs-12 col-md-4">
</widget-list>
マイウィジェットテンプレート:
<div class="widget widget-list">
<div class="panel b-a">
<div class="panel-heading b-b b-light">
<h5>{{$widget.title}}</h5>
<div class="pull-right">
<button type="button" class="btn btn-default btn-sm" ng-click="$widget.doSomething()">
Do something
</button>
</div>
</div>
<div class="panel-content">
{{$widget.content || 'No content'}}
</div>
</div>
</div>
マイウィジェット成分:
app.component('widgetList', {
templateUrl: 'template/widget/widget-list.html',
bindings: {
title : '@',
},
controllerAs: '$widget',
controller: function($timeout) {
$widget = this;
console.log('Title on init: ', $widget.title)
$timeout(function() {
console.log('Title after 3 seconds: ', $widget.title)
}, 3000)
$widget.doSomething = function() {
$widget.content = "Something";
}
}
});
ウィジェットを保持
私の主なHTMLテンプレート210
私のコードを実行している場合、これは私のコンソールは次のようになります。
レンダリング後もTitle on init: Books
Title on init: Movies
Title on init: Albums
(3) Title after 3 seconds: Albums
、すべての3つのウィジェットがそのテンプレートにNo content
を表示します。しかし、3つのウィジェットのいずれかでdoSomething()
ボタンをクリックすると、最後のウィジェットのコンテンツのみがSomething
に更新されます。
ここで何が起こっているか私のコンポーネントが「分離されていない」のはなぜですか?代わりに
$widget = this;
の
var $widget = this;
それは混乱を作成します$ウィジェット変数は、コントローラへの参照を保持しているため:
:
次のスニペットは、この問題を解決しますか? –
私の想像力でのみ:) –