【问题标题】:How to include function with parameter inside ng-include directive in Angular JS如何在Angular JS中的ng-include指令中包含带参数的函数
【发布时间】:2014-03-26 07:50:43
【问题描述】:

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

我正在使用以下语法来实现此功能,但无法正常工作。

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

这是我的控制器

  myapp.controller('MyCtrl', function($scope, $http) {
        $scope.getCategoryDetail=function(catid)
        {
            $scope.catid=catid;
            $http.post('categoryDetail.php',{catId:scope.catid}).success(function(data) {
            $scope.results=data;
            })
        };
    });

【问题讨论】:

    标签: javascript php angularjs controller


    【解决方案1】:

    我认为它不起作用,因为您正在 getCategoryDe​​tail 函数内部执行异步调用。此外,您将 POST 的结果分配给“结果”范围变量,但您没有在包含内的任何地方使用它。

    这篇文章可能会回答您的问题。 Angular.js directive dynamic templateURL

    【讨论】:

    • 是的,正在函数内部进行异步调用以返回每个特定类别 ID 的结果。此外,由于作用域变量是一个全局变量,它应该可以在控制器中的任何位置访问,并且“结果”作用域变量绑定在该控制器内部。
    • 对,但是你的 getCategoryDe​​tail 函数没有返回任何东西,所以你的 ng-include 有 src="''"
    • 这是我的问题。我如何让这个函数返回一些东西?我的代码有什么问题?
    • @meheshu 尝试使用 defer $q 可以从函数返回。
    • 返回的数据是HTML吗?如果您可以将 POST 更改为 GET,那么我认为您可以这样做 &lt;div ng-include src="categoryDetail.php?cat_id={{scope.catid}}"&gt;&lt;/div&gt;
    【解决方案2】:

    我认为自定义指令可以提供很大帮助。

    在你的主控制器中:

    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;
                });
            }]
        };
    }])
    

    现在我们可以使用我们的指令了。在您的主 HTML 页面中:

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

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

    【讨论】:

    • 谢谢安德鲁。这肯定会有所帮助。如果需要,我会检查一下并根据我的要求进行一些调整。
    • 太棒了。如果对你有用,请接受我的回答。
    猜你喜欢
    • 1970-01-01
    • 2014-10-16
    • 2014-02-17
    • 2015-01-07
    • 2016-03-31
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多