5

以下の例を参照すると、myCtrl2の代わりにmyCtrlを使用して、$ scopeにアタッチする代わりにローカルとして引数を渡す方法はありますか?

$ controllerサービスは、既存のコントローラーをラップするために必要な操作を正確に実行しますが、テンプレートからアクセスすることはできません。

<div ng-app>

  <script type="text/ng-template" id="/tpl.html">
    value of y: {{y}}
  </script>

  <div 
    ng-repeat='x in [1,2,3]' 
    ng-controller='myCtrl2'
    ng-include="'/tpl.html'">
  </div>

</div>
function myCtrl($scope, x){
  $scope.y = x * 20;
}

function myCtrl2($scope){
  $scope.y = $scope.x * 20;
}

http://jsfiddle.net/4Zmym/16/

4

1 に答える 1

13

私はあなたの質問からあなたが何を探しているのかを完全に知ることはできませんが、あなたはあなた自身のディレクティブ(ディレクティブの修正バージョン)を作成してコントローラーインジェクタブルを指定することを試みるかもしれませngController

app.directive('myController', function($controller) {
  return {
    scope: true,
    link: function(scope, elem, attrs) {
      var locals = scope.$eval(attrs.locals);
      angular.extend(locals, {$scope: scope});
      $controller(attrs.myController, locals);
    }
  };
});

次のように使用します。

<div my-controller='MainController' locals='{x: "test", y: 42}'></div>

テクニックを示すJsFiddleは次のとおりです。http://jsfiddle.net/BinaryMuse/qBZZk/

于 2013-02-26T08:45:15.010 に答える