指令范围被覆盖
Directive scope gets overwritten
我有这个指令,每当我执行 ng-repeat
时,出于某种原因,当我使用 console.log
时,它总是 return 来自 ng-repeat
的最后数据。
(function () {
'use strict';
angular
.module('app.schoolAdmin')
.directive('barGraph', barGraph);
barGraph.$inject = ['$timeout'];
function barGraph ($timeout) {
var scope;
var element;
return {
link: link,
restrict: 'EA',
scope: {
data: '=',
onClick: '&',
methods: '='
}
};
function init () {
console.log("DATA", scope.data);
}
function link (_scope, _element) {
scope = _scope;
element = _element;
$timeout(function () {
init();
}, 0);
}
}
})();
这里是 ng-repeat 的代码。(使用 json 管道时的数据是正确的。)
<div class="col-md-3"
ng-repeat="(key, group) in vm.analyticsData">
{{group | json}}
<h1>{{ key }}</h1>
<div class="charts-container">
<div class="chart-block">
<bar-graph data="group"></bar-graph>
</div>
</div>
</div>
$timeout(function () {
init();
}, 0);
您的上述 timeout
导致了问题。
删除它以解决问题。
如果你想保留 $timeout
,你可以像这样将 _scope
传递给你的 init 方法:
function init (data) {
console.log("DATA", scope.data);
console.log("REAL DATA", data);
}
function link (_scope, _element, attrs) {
scope = _scope;
element = _element;
$timeout(function () {
init(_scope.data);
}, 0);
}
这是一个示例 jsfiddle
我有这个指令,每当我执行 ng-repeat
时,出于某种原因,当我使用 console.log
时,它总是 return 来自 ng-repeat
的最后数据。
(function () {
'use strict';
angular
.module('app.schoolAdmin')
.directive('barGraph', barGraph);
barGraph.$inject = ['$timeout'];
function barGraph ($timeout) {
var scope;
var element;
return {
link: link,
restrict: 'EA',
scope: {
data: '=',
onClick: '&',
methods: '='
}
};
function init () {
console.log("DATA", scope.data);
}
function link (_scope, _element) {
scope = _scope;
element = _element;
$timeout(function () {
init();
}, 0);
}
}
})();
这里是 ng-repeat 的代码。(使用 json 管道时的数据是正确的。)
<div class="col-md-3"
ng-repeat="(key, group) in vm.analyticsData">
{{group | json}}
<h1>{{ key }}</h1>
<div class="charts-container">
<div class="chart-block">
<bar-graph data="group"></bar-graph>
</div>
</div>
</div>
$timeout(function () {
init();
}, 0);
您的上述 timeout
导致了问题。
删除它以解决问题。
如果你想保留 $timeout
,你可以像这样将 _scope
传递给你的 init 方法:
function init (data) {
console.log("DATA", scope.data);
console.log("REAL DATA", data);
}
function link (_scope, _element, attrs) {
scope = _scope;
element = _element;
$timeout(function () {
init(_scope.data);
}, 0);
}
这是一个示例 jsfiddle