保存指令的全局变量的最佳方法

时间:2015-03-11 20:59:57

标签: javascript angularjs angularjs-directive angularjs-scope

在我的指令链接功能中我有

angular.module('BTWebApplication').directive('singleTrack', ['$timeout', '$rootScope', function ($timeout, $rootScope) {
return {
    scope: {
        top: "&"
    },
    link: function ($scope, element, attrs) {

        $(element).click(function() {
            var a =$(element).offset();
            $rootScope.top = parseInt(a.top);

            $rootScope.gridIndex === $(this).index() ? hidePreview(element) : showPreview(element);

            function showPreview(index) {
                $rootScope.gridIndex = $(element).index();

                console.log('open');
            }
            function hidePreview() {
                 $rootScope.gridIndex = -1;
                 $rootScope.YoutubeID = -1;
            }
        });

    }, 
    controller: function($scope) {

    }
}

}]);

这有效,但我知道我不应该使用根范围。 我想要完成的是一个保存数据的变量,以便下次另一个元素点击时它将知道之前的值是什么。

1 个答案:

答案 0 :(得分:1)

避免使用rootScope,因为当应用程序的大小增加时,最好不要污染它,同样,代码变得越来越难以及值的变化等等。

无论如何,将变量初始化为外部,意思是这样的:

$scope.a = 0;

$(element).click(function(){
    $scope.a += 1;
});

现在您可以使用指令范围内的值。请注意,这只有在指令初始化一次时才有效,因为如果它被重新初始化,它将重置a的值。

但是,如果您需要持久性,并希望在应用中的其他位置使用该值,那么最好是使用服务。