从链接函数修改指令控制器变量
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
设置为 null。
正如您在我的 plunker 中看到的那样,我在指令模板上有一个ng-show="feedback"
,我在指令控制器中填写了用于检索消息的MessageService.get()
。在我的链接函数中,我想将其设置为 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;
}
并且还使用提供控制器实例的第 4 个参数在链接函数中访问它。
link: function (scope, el, attrs, ctrl) {
演示
相关文章:
- 在指令控制器中使用$attrs时出现问题
- Angular,从指令控制器中的控制器触发函数
- 角度指令控制器:参数不是函数,未定义
- 为什么我们将控制器变量设置为等于“0”;这个“;在角度上
- 我无法通过angularjs中的指令更新变量
- 如何将值传递到角度中的指令控制器
- AngularJS更新控制器变量并再次渲染视图
- 如何在 angularjs 中构造控制器变量
- angularjs+ui.router:指令控制器和链接函数之间的不同行为
- 从AngularJS中的指令模板访问内联控制器变量
- 当指令被销毁时,我需要销毁本地控制器变量吗
- 指令链接中的范围变量不会更新到指令控制器使用 Angular 读取它时
- 指令侦听控制器变量的变化
- 从链接函数修改指令控制器变量
- 在angular中,是否可以在控制器运行之前让指令将变量添加到范围中
- 绑定到父控制器变量后未清理指令作用域
- 不能在指令控制器中设置变量
- 指令angular中的访问范围控制器变量
- AngularJS用父控制器变量的值创建指令作用域
- 更新控制器变量,并在指令的视图中使用它(angular 1.5)