在自定义AngularJS指令中使用$ timeout

时间:2016-07-28 18:56:06

标签: javascript angularjs angular-directive

我想在我的自定义AngularJS指令中使用$ timeout,但它无效。我的上一个实现如下:

var App = angular.module('App', []);

App.controller('Controller', function($scope){
    $scope.test = true;
    $scope.toggle = function(){ $scope.test = !$scope.test;};
});

App.directive('showTemporary', ['$timeout', function ($timeout) {
    return {
        restrict: 'A',
        link: function(scope, element, attr){
                scope.$watch(attr.showTemporary, function(value){
                element.css('display', value ? '' : 'none');
            });
            $timeout(element.css('display', 'none'), attr.hideDelay);
        }
    }
}]);

标记:

<div ng-app='App'>
    <div ng-controller='Controller'>
        <button ng-click='toggle()'>toggle</button>
        <div show-temporary='test' hide-delay="5000"> visible</div>
    </div>
</div>

3 个答案:

答案 0 :(得分:4)

您需要将函数传递给$ timeout 尝试:

$timeout(function () {
 element.css('display', 'none')
}, attr.hideDelay);

你也应该观察属性,而不是观察。

attr.$observe('showTemporary', function(value){
                element.css('display', value ? '' : 'none');
            });

您的HTML也被破坏了:

<div show-temporary="{{test}}" hide-delay="5000"> visible</div>

答案 1 :(得分:2)

仔细查看$timeout docs。第一个参数是FUNCTION,所以你可能希望它是这样的:

$timeout(function(){
    element.css('display', 'none')
}, attr.hideDelay);

答案 2 :(得分:0)

我不确定你要在这里完成什么,但这就是你应该如何使用$ timeout

$timeout([fn], [delay], [invokeApply], [Pass]);

$timeout(function() {element.css('display', 'none')}, attr.hideDelay);