首先,我从该主题中找到了api地址:
Laravel 4 and Angular JS and Twitter Bootstrap 3 Pagination
现在我正在为此工作,我的小脚本是这样的:
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);
}
});
另请参见此 short demo 。