javascript - Angularjs - data binding not working with controller -
javascript - Angularjs - data binding not working with controller -
i developing app uses bootstrap (v3.2.0) angularjs (v1.2.26), want create set of columns changable via dropdown.
i have got dropdown info binding ok, failing alter bootstrap responsive column classes when user selects different number of columns in dropdown.
this fiddle shows code far.
the html...
<div data-ng-app=""> <div class="container-fluid"> <nav class="navbar navbar-default" role="navigation"> <div class="container-fluid"> <!-- brand , toggle grouped improve mobile display --> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> <span class="sr-only">toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <span class="navbar-brand navbar-collapse-header">header</span> </div> <!-- collect nav links, forms, , other content toggling --> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav navbar-right"> <li data-ng-controller="columncontroller" id="columndropdown" class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">columns: {{columnlayout.value}} <span class="caret"></span></a> <ul class="dropdown-menu" role="menu"> <li data-ng-repeat="layout in columnlayouts"> <a data-ng-click="changelayout(event)" href="#" class="portlet-column-number">{{layout.text}}</a> </li> </ul> </li> </ul> </div> <!-- /.navbar-collapse --> </div> <!-- /.container-fluid --> </nav> </div> <div class="row"> <div data-ng-controller="columncontroller" data-ng-class="getlayoutclass()"> <div class="panel panel-default"> <div class="panel-heading mo-product-header">header 1</div> <div class="panel-body">more content</div> <div class="panel-footer">layout class {{getlayoutclass()}}</div> </div> </div> <div data-ng-controller="columncontroller" data-ng-class="getlayoutclass()"> <div class="panel panel-default"> <div class="panel-heading mo-product-header">header 2</div> <div class="panel-body">some other content</div> <div class="panel-footer">layout class {{getlayoutclass()}}</div> </div> </div> <div data-ng-controller="columncontroller" data-ng-class="getlayoutclass()"> <div class="panel panel-default"> <div class="panel-heading mo-product-header">header 3</div> <div class="panel-body">some content</div> <div class="panel-footer">layout class {{getlayoutclass()}}</div> </div> </div> </div> </div>
and js...
function columncontroller($scope) { $scope.columnlayouts = [{ value: 3, text: "reset", layoutclass: "col-sm-6 col-md-4" }, { value: 1, text: "1", layoutclass: "col-sm-12" }, { value: 2, text: "2", layoutclass: "col-sm-6" }, { value: 3, text: "3", layoutclass: "col-sm-4" }]; $scope.changelayout = function () { $scope.columnlayout = this.layout; } $scope.getlayoutclass = function(){ homecoming $scope.columnlayout.layoutclass; } $scope.columnlayout = $scope.columnlayouts[0]; }
update:
ok turns out should have added 'columncontroller' 1 element , in case element works best wrapper other elements.
however, think farther improve create separate controller navigation , broadcast messages change, in case have columncontroller
hear messages column changes , repsond them alter model driving column layout.
the problem set many data-ng-controller="columncontroller"
. don't need add together every tag utilize angular binding {{}}
or ngrepeat
. need 1 on wrapping container. example:
<div data-ng-app="" data-ng-controller="columncontroller"> ... </div>
demo: http://jsfiddle.net/pykm0tkv/25/ javascript angularjs twitter-bootstrap data-binding
Comments
Post a Comment