我正在尝试在我的控制器中发出http请求,但我的$scope.dataSource
又以undefined
的形式返回,我不知道为什么。我建立了这样的指令:
app.directive('users', function(){
return {
restrict: 'E',
templateUrl: '/templates/dashboard/config/users.html',
scope: {
dataSource: '@'
},
controller: function($scope, $http){
$http({
url: $scope.dataSource
}).success(function(data){
$scope.data = data;
});
}
};
});
这样的html,但它没有运行ajax请求,因为$scope.dataSource
是undefined
。
<users class="col-sm-4" data-source="/data/users.json"></users>
答案 0 :(得分:0)
您不需要controller
您需要link
功能,并将scope
和$http
传递给它。
app.directive('users', function($http){
return {
restrict: 'E',
templateUrl: '/templates/dashboard/config/users.html',
scope: {
dataSource: '@'
},
transclude: true,
link: function(scope, elem, attrs){
$http({
url: scope.dataSource
}).success(function(data) {
$parent.$scope.data = data; // where data is a model in parent controller.
});
}
};
});
答案 1 :(得分:0)
将其移至监视功能:
app.directive('users', function($http) {
return {
restrict: 'E',
templateUrl: '/templates/dashboard/config/users.html',
scope: {
source: '@'
},
link: function($scope){
$scope.watch('source', function(source) {
if (dataSource !== undefined) {
$http({
url: source
}).success(function(data){
$scope.data = data;
});
}
});
}
};
});
答案 2 :(得分:0)
使用$attrs
可以获得如下值:
app.directive('users', function(){
return {
restrict: 'E',
templateUrl: '/templates/dashboard/config/users.html',
scope: {
dataSource: '@'
},
controller: function($scope, $http, $attrs){
$http({
url: $attrs.source
}).success(function(data){
$scope.data = data;
});
}
};
});
我仍然在范围和html中使用dataSource
,但在控制器中使用$attrs.source
。