Javascript 如何在Angular JS中包含参数在ng include指令中的函数

Javascript 如何在Angular JS中包含参数在ng include指令中的函数,javascript,php,angularjs,controller,Javascript,Php,Angularjs,Controller,我试图在ng include指令中包含函数。函数接受参数并基于此加载动态内容 我正在使用以下语法来实现此功能,但不起作用 <div ng-controller="MyCtrl"> <div ng-include src="'getCategoryDetail(cat_id)'"></div> <div>{{results}}</div> </div> 我假设它不起作用,因为您正在getCategoryDetail函数内部执

我试图在ng include指令中包含函数。函数接受参数并基于此加载动态内容

我正在使用以下语法来实现此功能,但不起作用

<div ng-controller="MyCtrl">
<div ng-include src="'getCategoryDetail(cat_id)'"></div>
<div>{{results}}</div>
</div>

我假设它不起作用,因为您正在getCategoryDetail函数内部执行异步调用。此外,您正在将POST的结果分配给“results”范围变量,但您没有在include中的任何位置使用它

这篇文章也许能回答你的问题。

我认为定制指令会有很大帮助

在主控制器中:

myapp.controller('MyCtrl', function($scope) {
    $scope.categoryIds = ids //I don't know where these come from, but that's up to you.
});
然后你可以定义一个指令,我们称之为category

myapp.directive('category', ['$http', function ($http) {
return {
    restrict : 'A',
    template : '<div>{{results.dataItem1}}</div>', //You could define your template in an external file if it is complex (use templateUrl instead to provide a URL to an HTML file)
    replace: true,
    scope: {
        category: '@',
    },
    controller: ['$scope', '$element', '$attrs', '$http',
        function($scope, $element, $attrs, $http) { 
            $http.post('categoryDetail.php', {catId:$scope.category}).success(function(data) {
                $scope.results = data;
            });
        }]
    };
}])
myapp.directive('category',['$http',function($http){
返回{
限制:“A”,
模板:{{results.dataItem1}},//如果模板比较复杂,可以在外部文件中定义模板(使用templateUrl提供HTML文件的URL)
替换:正确,
范围:{
类别:“@”,
},
控制器:[“$scope”、“$element”、“$attrs”、“$http”,
函数($scope,$element,$attrs,$http){
$http.post('categorydeail.php',{catId:$scope.category}).success(函数(数据){
$scope.results=数据;
});
}]
};
}])
现在我们可以使用我们的指令了。在主HTML页面中:

<div ng-controller="MyCtrl">
    <div ng-repeat="catId in categoryIds" category="catId"></div>
</div>


这将为每个类别id呈现一个div,每个div将加载自己的数据。希望这能有所帮助。我还没有对此进行测试,因此可能需要进行一些调整。

是的,在函数内部进行异步调用以返回每个特定类别id的结果。此外,由于范围变量是全局变量,因此应该可以在控制器内的任何位置访问它,并且“results”范围变量绑定在此控制器内。对,但是您的getCategoryDetail函数不返回任何内容,因此您的ng include具有src=“””,这是我的问题。如何使此函数返回某些内容?我的代码有什么问题?@meheshu尝试使用defer
$q
从函数返回。返回的数据是HTML吗?如果你能把你的帖子改成GET,那么我想你可以做
谢谢安德鲁。这肯定会有帮助。我会检查出来,并做一些调整,如果需要根据我的要求。太好了。如果我的回答对你有效,请接受。
<div ng-controller="MyCtrl">
    <div ng-repeat="catId in categoryIds" category="catId"></div>
</div>