7

これが私のプランカーの例です: http://plnkr.co/edit/Tc9FRHAEoQlOqy7sk1Ae?p=preview

私がやろうとしていること: cellTemplate を使用して、データの field04 からチェックボックス html をセルにバインドし、まだその ng-click 関数にアクセスできます。

app.js のコード:

var app = angular.module('app', ['ui.grid', 'ngSanitize']);

app.controller('MainCtrl', ['$scope', '$log', function ($scope, $log, $sce) {

$scope.myViewModel = {
  someProp:'abc',
  showMe : function(){
     alert(this.someProp);
  }
};

$scope.gridOptions = {
};

$scope.gridOptions.columnDefs = [
     { name: 'field01', field: 'field01' },
     { name: 'field02', field: 'field02'},
     { name: 'field03', field: 'field03', cellTemplate: '<input type="checkbox" ng-model="row.entity.field03" ng-click="$event.stopPropagation();getExternalScopes().showMe()">'},
     { name: 'field04', field: 'field04', cellTemplate: 'viewTemplate2'},
     { name: 'field05', field: 'field05', cellTemplate: 'viewTemplate2'} 
   ];

$scope.gridOptions.data = [
  {
      "field01": "one",
      "field02": "01",
      "field03": false,
      "field04": '',
      "field05": '',
  },
  {
      "field01": "two",
      "field02": "02",
      "field03": false,
      "field04": '',
      "field05": '',
  },
  {
      "field01": "three",
      "field02": "03",
      "field03": false,
      "field04": '<input type="checkbox" ng-model="row.entity.field03" ng-click="$event.stopPropagation();getExternalScopes().showMe()">',
      "field05": '<div><a href="#" title="icon link"><img class="icon" alt=""/></a></div>',
  }
];
$scope.toggle = function() {
  alert("toggled");
}
}]);

index.html からのコード:

<body>

<div ng-controller="MainCtrl">
  <div ui-grid="gridOptions" external-scopes="myViewModel" class="grid"></div>
</div>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.5/angular-sanitize.min.js"></script>
<script src="app.js"></script>
<script type="text/ng-template" id="viewTemplate2">
  <span ng-bind-html="row.entity[col.field]"></span>
</script>

</body>

columnDef に html を記述すると、field03 で正しい効果が得られます。こちらの TomMorgan のプランカーに感謝します: http://plnkr.co/edit/9eRg9Yjl2ooeSuWMJ8x2?p=preview

field05 のデータから、cellTemplate に html を入力できます。

field04 のチェックボックスが機能しないのはなぜですか?

私は angularjs が初めてで、「ui-grid」ソリューションを「ng-grid」ソリューションから分離するのは困難です。助けてくれてありがとう。

4

3 に答える 3

10

あなたのコードを理解しているかどうかわかりません。

データに html コードを入れないでください。だから私はそれを次のように変更しました:

   $scope.gridOptions.data = [
      {
          "field01": "one",
          "field02": "01",
          "field03": false,
          "field04": '',
          "field05": '',
      },
      {
          "field01": "two",
          "field02": "02",
          "field03": false,
          "field04": '',
          "field05": '',
      },
      {
          "field01": "three",
          "field02": "03",
          "field03": false,
          "field04": '',
          "field05": '',
      }
    ];

次: セル テンプレートで、変更する値への参照を渡します。

 { name: 'field03', field: 'field03', cellTemplate: '<input type="checkbox"
  ng-model="row.entity.field03" ng-click="$event.stopPropagation();
  getExternalScopes().showMe(row.entity.field03)">'}

showMe()関数にパラメーターがあることに注意してください。

showMe(row.entity.field03)

外部スコープでは、次のパラメーターに反応する必要があります。

$scope.myViewModel = {
  someProp:'abc',
  showMe : function(value){
     alert('toggled to: '+value);
  }
};

(あなたは本当に必要ありませんsomeProp

関数は削除するか、$scope.toggle()から呼び出すことができますshowMe()

さらに、バインディングがうまく機能することを示すために、html にデバッグ ヘルプを追加しました。

<div ng-controller="MainCtrl">
  <div ui-grid="gridOptions" external-scopes="myViewModel" class="grid"></div>
  <hr>
  {{gridOptions.data | json}}
</div>

これがプランカーです。それはあなたが望むものですか?

アップデート:

これは、列 4 にチェックボックスがある別のプランカーです。

于 2014-12-19T17:49:14.840 に答える
0

$sce を使用して、バインディングしている HTML コンテンツが安全であることを ng-bind-html に伝える必要があります。

私はあなたのプランカーをフォークしました。あなたの質問に対する解決策はhttp://plnkr.co/edit/JyTaF8niJlf9Wpb775kb?p=previewです

    app.filter('unsafe', function ($sce) {
       return $sce.trustAsHtml;
    });

このフィルターを ng-bind-html で使用する必要があります

于 2017-01-12T06:57:20.413 に答える