首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从控制器调用指令方法

从控制器调用指令方法
EN

Stack Overflow用户
提问于 2014-05-07 06:36:07
回答 1查看 1K关注 0票数 1

我正在创建一个带有角的指令,并在其中使用kendo-window控件。现在我想根据控制器的要求打开那个剑道窗口。简单地说,我想通过单击按钮从directivecontroller调用一个方法。

这是我的代码示例

代码语言:javascript
复制
sample.directive('workorderwindow', [initworkorderwindow]);
    function initworkorderwindow() {
        return {
            link: function (scope, elements, attrs) {
            },
            restrict: 'E',
            template: "<div data-kendo-window='window.control' data-k-options='window.config'> HELLOW RORLD </div>",
            scope: {

            },
            controller: function ($scope) {
                $scope.window =
                    {
                        control: null,
                        config: { title: 'HELLO WORLD', visible: false }
                    }
                $scope.open = function () {
                    $scope.window.control.center().open();
                }
            }
        }
    }

HTML

代码语言:javascript
复制
<workorderwindow></workorderwindow>

现在,我想从我的控制器中调用这个指令open方法。

代码语言:javascript
复制
 sample.controller('datacontroller', ['$scope', 'datafac', initcontroller]);
        function initcontroller($scope, datafac) {
            $scope.onsampleclick = function () {
//FROM HERE
            }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-07 08:32:35

直接从控制器调用指令的函数可能是一种糟糕的做法。您可以做的是创建一个服务,从您的控制器调用它,并将该服务注入您的指令中。使用$watch,您将能够触发您的指令函数。

控制器与指令之间的服务

代码语言:javascript
复制
app.factory('myWindowService', function () {
return {
    windowIsOpen : null,
    openWindow: function () {
        this.windowIsOpen = true;
    },
    closeWindow: function () {
        this.windowIsOpen = false;
    }
};

你的指令:

代码语言:javascript
复制
app.directive('workorderwindow', function () {
return {
    restrict: 'E',
    template: "<div>test</div>",
    controller: function ($scope, myWindowService) {
        $scope.windowService = myWindowService;

        $scope.$watch("windowService.windowIsOpen", function (display) {
            if (display) {
                console.log("in directive");
                //$scope.window.control.center().open();
            }
            // You can close it here too
        });
    }
};
})

从你的控制器打电话给它

代码语言:javascript
复制
app.controller('datacontroller', function ($scope, myWindowService) {
  $scope.open = function () {
      myWindowService.openWindow();
  }
  // $scope.close = ...
});

这里是一个工作Fiddle http://jsfiddle.net/maxdow/ZgpqY/4/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23510459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档