0

同じ要素の別のディレクティブで$applyからディレクティブのコントローラー関数を参照するにはどうすればよいですか?例:

<myelement hint="myelement.controller.getMe()">hoverMe</myelement>

app.directive("myelement", function () {
    return {
        restrict: "E",
        controller: function ($scope) {
            this.getMe = function () {
                return "me";
            };
        }
    }
});

app.directive("hint", function () {
    return {
        restrict: "A",
        controller: function ($rootScope) {
          this.showHint = function (getMsg) {
            alert($rootScope.$apply(getMsg)); //what should be written here?
          }
        },
        link: function (scope, element, attrs, controller) {
            element.bind("mouseenter", function () {
              controller.showHint(attrs.hint);
            });
        }
    }
});

出典: http: //plnkr.co/edit/9qth9N?p = Preview

4

1 に答える 1

0

requireを使用します(詳細はこちらをご覧ください)。

app.directive("hint", function () {
  return {
    restrict: "A",
    require: ["myelement", "hint"],
    controller: function ($scope) {
      this.showHint = function (msg) {
        alert($scope.$apply(msg)); //what should be written here?
      }
    },
    link: function (scope, element, attrs, ctrls) {
        var myElementController = ctrls[0],
            hintController = ctrls[1];

        element.bind("mouseenter", function () {
          hintController.showHint(myElementController.getMsg());
        });
    }
  }
});

更新(ヒントをユニバーサルにすることについては、以下のコメントを参照してください)

ヒントディレクティブをユニバーサルにするには、それらの間の媒体として$scopeを使用できます。

app.directive("myelement", function () {
 return {
    restrict: "E",
    controller: function ($scope) {
        $scope.getMe = function () {
            return "me";
        };
    }
 }
});
<myelement hint="getMe()">hoverMe</myelement>

唯一の変更点は、getMeメッセージがコントローラー(this.getMe)ではなく$ scope($scope.getMe)に設定されることです。

于 2013-03-18T01:24:00.390 に答える