javascript - How to properly use the same AngularJS 1.5 component multiple times in a view? -


i'm creating set of widgets angularjs 1.5's new components. problem is, when using same widget multiple times, somehow share controller or scope. thought 1 of things components scope isolated?


my main html template hold widgets:

<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> 

my widget template:

<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()">                                     </button>             </div>         </div>          <div class="panel-content">             {{$widget.content || 'no content'}}         </div>      </div> </div> 

my widget component:

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";         }     } }); 

when running code, console looks like:

title on init: books title on init: movies title on init: albums (3) title after 3 seconds: albums 

also after rendering, 3 widgets display no content in template. but, when clicking dosomething() button in either 1 of 3 widgets, content of last widget updates something.

what happening here? why components not 'isolated'?

looks have global variable called $widget here, try this:

var $widget = this; 

instead of

$widget = this; 

it creates mess since $widget variable holds reference controller has been initialized, in case controller of third component.


Comments

Popular posts from this blog

php - How to add and update images or image url in Volusion using Volusion API -

javascript - jQuery UI Splitter/Resizable for unlimited amount of columns -

javascript - IE9 error '$'is not defined -