Angularjs:scope.data在指令中未定义



首先,我从这个主题中找到了api地址:Laravel 4和Angular JS和Twitter Bootstrap 3分页

现在我正在处理这个问题,我的小脚本是这样的:

var app = angular.module('kategori', [
'ngResource',
'apiBaseRoute'
]);
app.factory('Data', ['$resource', 'apiBaseRoute', function($resource, config){
return $resource('http://develop.alexei.me/careers/careers.php?callback=JSON_CALLBACK&page=:page', {
page: 1
}, {
'get': {
method: 'JSONP'
}
});
}]);
app.controller('KategoriListCtrl', function($scope, Data){
$scope.init = function() {
Data.get({}, function(response){
$scope.kategoriList = response.careers;

},function(error){
console.log("HATA VAR" + error);
});
};
});
app.directive('paginate', function(){
return{
scope:{ allData: '=paginate2' },
link: function(scope){
console.log(scope);
}
}
});

这是html端:

<div class="col-md-6 col-md-offset-3" ng-controller="KategoriListCtrl" ng-init="init()">
{{kategoriList}}
<div paginate paginate2="kategoriList"></div>
</div>

正如你所看到的,指令中的console.log(scope)在控制台中显示了很多东西,尤其是我在那里看到的allData有很多数据,但如果我把它改为

console.log(scope.allData)

它打印未定义的。。

我不明白为什么。我该如何解决这个问题?谢谢

当JS到达console.log时,allData属性未定义(因为kategoriList未定义)。kategoriList(以及因此allData)在稍后异步创建(并且填充有大量数据)。

那么,为什么在记录scope对象时会看到数据呢?

在记录对象时,它没有属性allData(也没有数据)
但是当您转到控制台并展开节点并查找allData属性时,该属性已由AJAX调用(使用$resource)添加和填充。


不清楚您想用allData做什么
如果你想在例如ng-repeat中使用它,你不必担心:你可以正常使用它(就像它被定义的一样),Angular会在它到达并完成任务时自动"拿起它">
然而,如果您想(出于您自己的神秘原因)在它准备好时得到通知,您可以使用$watch

scope.$watch('allData', function(newValue) {
if (newValue !== undefined) {
console.log(scope.allData);
}
});

另请参阅简短演示

最新更新