2015-11-06 16 views
8

uib-tabsetの範囲内で使用すると、値はスコープの変数とバインドされません。 ここでの例は次の私は、UIB-タブ内の$scope.messageを取得しようとしましたし、それの外:uib-tabset内で使用されている場合、値はスコープの変数とバインドされません。

angular.module("app", ["ui.bootstrap"]) 
 
\t \t .controller("myctrlr", ["$scope", function($scope){ 
 
      $scope.message = "my message "; 
 
\t \t }]);
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet"/> 
 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.14.3/ui-bootstrap-tpls.min.js"></script> 
 
<div ng-app="app" ng-controller="myctrlr" class="col-md-6 col-md-offset-3"> 
 
\t <uib-tabset> 
 
\t  <uib-tab heading="Static title"> 
 
      <input type="text" ng-model="message" ng-change="change()" /> 
 
      <br /> 
 
      Inside uib-tab : {{ message }} 
 
\t \t </uib-tab> 
 
\t  <uib-tab heading="Another title"> 
 
\t  I've got an HTML heading, and a select callback. Pretty cool! 
 
\t  </uib-tab> 
 
    \t </uib-tabset> 
 
    Outside uib-tab : {{ message }} 
 
</div>

私は$scope.messageを宣言し、UIB-タブ内のinput要素でそれをバインドしようとしました。しかし、私がそれを価値に変えたとき、変更はuib-tabの外部に反映されていません。

jsfiddle link

答えて

16

でこれを確認することができますこれは双方向結合を破る可能性があります。私は、tabsetディレクティブが独自のスコープを作成すると推測しているので、コントローラで定義されたvalueInScope変数はそのプリミティブなので、タブセットの子スコープでそのバインディングを失います。

$scope.data = {message:'my message'} 

Solution by Object

また、あなたが子スコープをバインドする$parent.parentpropertyを使用することができます。これにより、子スコープが独自のプロパティを作成できなくなります。

Solution by using $parent

+0

は、私は$ uibModalInstanceを使用して持っていた同様の問題を解決しました – CampbellGolf

4

あなたがスコープでオブジェクトを作成し、コントローラ内部スコープの代わりにオブジェクトのプロパティを追加することによって、この問題を解決することができます。

$scope.obj = {message : 'my message'}; 

あなたは原始的に結合するか、変数の値が周り渡され、そしてないそれを参照され、角度にお​​ける基本的plunkerリンク以下

http://plnkr.co/edit/3koAJnkOyf6hfGwO6AuD?p=preview

関連する問題