我正在创建一个带有角的指令,并在其中使用kendo-window控件。现在我想根据控制器的要求打开那个剑道窗口。简单地说,我想通过单击按钮从directive从controller调用一个方法。
这是我的代码示例
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
<workorderwindow></workorderwindow>现在,我想从我的控制器中调用这个指令open方法。
sample.controller('datacontroller', ['$scope', 'datafac', initcontroller]);
function initcontroller($scope, datafac) {
$scope.onsampleclick = function () {
//FROM HERE
}发布于 2014-05-07 08:32:35
直接从控制器调用指令的函数可能是一种糟糕的做法。您可以做的是创建一个服务,从您的控制器调用它,并将该服务注入您的指令中。使用$watch,您将能够触发您的指令函数。
控制器与指令之间的服务
app.factory('myWindowService', function () {
return {
windowIsOpen : null,
openWindow: function () {
this.windowIsOpen = true;
},
closeWindow: function () {
this.windowIsOpen = false;
}
};你的指令:
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
});
}
};
})从你的控制器打电话给它
app.controller('datacontroller', function ($scope, myWindowService) {
$scope.open = function () {
myWindowService.openWindow();
}
// $scope.close = ...
});这里是一个工作Fiddle http://jsfiddle.net/maxdow/ZgpqY/4/
https://stackoverflow.com/questions/23510459
复制相似问题