在我的指令链接功能中我有
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) {
}
}
}]);
这有效,但我知道我不应该使用根范围。 我想要完成的是一个保存数据的变量,以便下次另一个元素点击时它将知道之前的值是什么。
答案 0 :(得分:1)
避免使用rootScope,因为当应用程序的大小增加时,最好不要污染它,同样,代码变得越来越难以及值的变化等等。
无论如何,将变量初始化为外部,意思是这样的:
$scope.a = 0;
$(element).click(function(){
$scope.a += 1;
});
现在您可以使用指令范围内的值。请注意,这只有在指令初始化一次时才有效,因为如果它被重新初始化,它将重置a的值。
但是,如果您需要持久性,并希望在应用中的其他位置使用该值,那么最好是使用服务。