从 link 函数修改指令控制器变量
Modify directive controller variable from link function
我已经用我的代码创建了一个 plunker,但是由于某些原因 ng-click
不能在那里工作。
好吧,希望这足以说明我的问题。 http://plnkr.co/edit/ILbz7tMLpOgXyO0Dx6su?p=preview
所以我正在尝试创建我自己的简单 MessageService
,这是一个保存下一个 $state
消息的服务(使用 ui-router)。
我创建了一个小指令,我也将其包含在我的 plunker 中。
该指令在下一条路线上显示消息,但出于某种原因(我不知道)它不会触发 $timeout
函数,我将 scope.feedback
设置为空。
正如您在我的 plunker 中看到的那样,我在指令模板上有一个 ng-show="feedback"
,我在指令控制器中用 MessageService.get()
填充它以检索消息。在我的 link 函数中,我想将它设置为 null,以便在一段时间后隐藏它。
模板:
<div ng-show="feedback" class="feedback">
<div class="alert feedback-message alert-success">{{feedback}}</div>
</div>
控制器功能:
$scope.$on('$stateChangeSuccess', function () {
$scope.feedback = MessageService.get();
});
链接函数:
if (scope.feedback != null) {
if (scope.feedback.type == 'success') {
scope.typeClass = 'alert-success';
} else if (scope.feedback.type == 'error') {
scope.typeClass = 'alert-danger';
}
$timeout(function () {
scope.feedback = null;
}, 1500)
}
如果您需要更多信息,请告诉我。
指令的 link
函数不仅会定期自动执行,它也不知道 statechangeSuccess
事件何时发生。只有当指令呈现(编译)时,它才会 运行 。只需将其隐藏在 $stateChangeSuccess
本身。
$scope.$on('$stateChangeSuccess', function () {
$scope.feedback = MessageService.get();
$timeout(function () {
$scope.feedback = null;
}, 1500)
});
或者只在控制器上添加一个方法(或者你也可以只在范围上添加它)
var _this = this;
$scope.$on('$stateChangeSuccess', function () {
$scope.feedback = MessageService.get();
$timeout(_this.hideFeedBack, 1500); //Invoke it here
});
_this.hideFeedBack = function(){
$scope.feedback = null;
}
并且还可以在 link 函数中使用提供控制器实例的第 4 个参数访问它。
link: function (scope, el, attrs, ctrl) {
我已经用我的代码创建了一个 plunker,但是由于某些原因 ng-click
不能在那里工作。
好吧,希望这足以说明我的问题。 http://plnkr.co/edit/ILbz7tMLpOgXyO0Dx6su?p=preview
所以我正在尝试创建我自己的简单 MessageService
,这是一个保存下一个 $state
消息的服务(使用 ui-router)。
我创建了一个小指令,我也将其包含在我的 plunker 中。
该指令在下一条路线上显示消息,但出于某种原因(我不知道)它不会触发 $timeout
函数,我将 scope.feedback
设置为空。
正如您在我的 plunker 中看到的那样,我在指令模板上有一个 ng-show="feedback"
,我在指令控制器中用 MessageService.get()
填充它以检索消息。在我的 link 函数中,我想将它设置为 null,以便在一段时间后隐藏它。
模板:
<div ng-show="feedback" class="feedback">
<div class="alert feedback-message alert-success">{{feedback}}</div>
</div>
控制器功能:
$scope.$on('$stateChangeSuccess', function () {
$scope.feedback = MessageService.get();
});
链接函数:
if (scope.feedback != null) {
if (scope.feedback.type == 'success') {
scope.typeClass = 'alert-success';
} else if (scope.feedback.type == 'error') {
scope.typeClass = 'alert-danger';
}
$timeout(function () {
scope.feedback = null;
}, 1500)
}
如果您需要更多信息,请告诉我。
link
函数不仅会定期自动执行,它也不知道 statechangeSuccess
事件何时发生。只有当指令呈现(编译)时,它才会 运行 。只需将其隐藏在 $stateChangeSuccess
本身。
$scope.$on('$stateChangeSuccess', function () {
$scope.feedback = MessageService.get();
$timeout(function () {
$scope.feedback = null;
}, 1500)
});
或者只在控制器上添加一个方法(或者你也可以只在范围上添加它)
var _this = this;
$scope.$on('$stateChangeSuccess', function () {
$scope.feedback = MessageService.get();
$timeout(_this.hideFeedBack, 1500); //Invoke it here
});
_this.hideFeedBack = function(){
$scope.feedback = null;
}
并且还可以在 link 函数中使用提供控制器实例的第 4 个参数访问它。
link: function (scope, el, attrs, ctrl) {