javascript - AngularJS ng-click不在范围内调用函数

标签 javascript angularjs

我有一个自定义指令,它从网络服务调用加载导航 block 。 我正在尝试单击其中一个我放入“ng-click”的导航链接。 我正在尝试单击应调用 ng-click 中调用的函数的链接。该函数应该执行,但实际上没有。

这是我的路线

var cartangularPublicShoppingApp = angular.module('cartangularPublicShoppingApp', [
  'ngRoute',
  'CategoriesController',
  'CategoryServices',
  'CategoryNavigationServices',
  'MenuModule'
]);
cartangularPublicShoppingApp.config(['$routeProvider',
    function($routeProvider) {
        $routeProvider.
            when('/cart', {
                templateUrl: 'partials/public/cart.html',
                controller: 'CartCtrl'
            }).
            when('/categories/:categoryId', {
                templateUrl: 'partials/public/categories.html',
                controller: 'CategoriesController'
            }).
            otherwise({
                redirectTo: '/categories'
            });
    }]
);

这是自定义指令

angular.module('MenuModule', [])
.directive('myCustomer', function() {
        return {
            restrict: 'E',
            templateUrl: './partials/public/customer.html',
            controller: function($scope, $sce, CategoryNavigationService) {

                var z = CategoryNavigationService.getCategoryNavigation().success(function(data){
                    $scope.categoryNavigation = data;
                    var navHTML = createCategoryNavigationBar(data);
                    var t = $sce.trustAsHtml(navHTML);
                    $scope.panes = t;

                }).error(function(data){

                        var error = "Get confident, stupid!";
                        var t = $sce.trustAsHtml(error);
                        $scope.panes = t;
                });
                function createCategoryNavigationBar(categoryNavigation){
                     var test = "";
                    var categoryId;
                    var catNavArray = categoryNavigation.categoryNavigationArray;
                     for(categoryId in catNavArray){
                         var currentCategoryNavigation = categoryNavigation.categoryNavigationArray[categoryId];
                            var string =  '<li> <a href="javascript:void(0);" name="categoryId" ng-click="getProductsForCategory()">' + currentCategoryNavigation.categoryName + "</a>";
                            test = test + string;

                         var count = 0;
                         var countingNavArr = currentCategoryNavigation.categoryNavigationArray;
                         for(var countingObject in countingNavArr){
                             count++;
                         }
                         if(count > 0){
                             var innerCategoryId;
                             test = test + "<ul>";
                             for(innerCategoryId in currentCategoryNavigation.categoryNavigationArray){
                                 var innerCategoryNavigation = currentCategoryNavigation.categoryNavigationArray[innerCategoryId];
                                 var innerTest = createCategoryNavigationBar(innerCategoryNavigation);
                                 test = test + innerTest;
                             }
                             test = test + "</ul>";
                         }
                         test = test + "</li>";
                    }
                    test = '<ul id="menu">' + test + '</ul>';
                    return test;



                }

            }
        };
    });

这是路由到我在其中显示指令的 html 片段的 Controller 。

var categoriesControllers = angular.module('CategoriesController', []);

categoriesControllers.controller('CategoriesController', ['$scope', '$routeParams' , '$location', 'CategoryService',
  function($scope, $routeParams, $location, CategoryService) {

      var categoryId = $routeParams.categoryId;
      getProductsByCategoryIdServiceCall(CategoryService, categoryId);

      $scope.getProductsForCategory = function(){
          var categoryId = 4;
          getProductsByCategoryIdServiceCall(CategoryService, categoryId);

      }
      function getProductsByCategoryIdServiceCall(CategoryService, categoryId){
          CategoryService.getProductsByCategoryId(categoryId).success(function(data){
              $scope.productsDTO = data;
              $scope.name = "David M Pugh";
          }).error(function(data){
                  $scope.name = "David Q Pugh";
                  $scope.name = data;
          });

      }

  }]);

这是来自 categories.html 的代码片段,其中包含自定义指令:

   <div class="row-fluid">
        <div class="span12">
            <div class="navbar">
                <div class="navbar-inner">
                    <div class="container" style="width: auto;">
                        <div class="span5"></div>
                        <div class="span2">
                            <div id="currentCategoryDropBoxMenu">

                            </div>
                        </div>

                    </div>
                </div>
            </div>
        </div>
    </div>
    <br />
  <my-customer></my-customer>
    <br />

我尝试将在 ng-click 中调用的 javascript 方法更改为: ng-click="getProductsForCategory"也是如此。

两者都导致单击链接时未调用方法 getProductsForCategory

有人知道我的问题是什么吗?

谢谢,

大卫

编辑信息* 大家好,感谢您调查这个问题。它仍在进行中,但我为我的自定义指令向我的 html 片段添加了一个额外的测试

<div ng-bind-html="panes"></div>
<a href="javascript:void(0);" ng-click="getProductsForCategory()">testing</a>

在唯一的一行之前是第一个标签,它是 div。 我添加了第 2 行以查看它是否可能是将 html 直接绑定(bind)到指令中的 div 标记,或者指令的其他配置是否存在问题。

我添加的第二个标签应该是一个标准的 ng-click 操作。我的第二个 href 标签 调用函数 getProductsForCategory()。 所以这似乎是由于我将我的 html 字符串绑定(bind)到指令的 div 元素。

问题是我正在构建的导航结构可以有无限嵌套的子元素(它基本上是一个 suckerfish 选择框)。

这意味着我将不得不使用递归来映射每个父子导航 结构...在指令中...

最佳答案

ng-click 标记中缺少一组大括号

ng-click="getProductsForCategory"

应该是

ng-click="getProductsForCategory()"

关于javascript - AngularJS ng-click不在范围内调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20021861/

相关文章:

javascript - 如何使用 JavaScript 获取服务器日期?

javascript - AngularJS - 对带有数字的字符串进行 ng-repeat 排序

javascript - ng 如果字符串包含 Angular

javascript - 使用 jquery 构建自动完成功能时遇到问题

javascript - 在 react native 应用程序中加载主屏幕之前显示模式

javascript - 在表中搜索相同的日期并将复选框添加到 td

javascript - Webpack 的 bulk-require 实现问题的替代方案

javascript - AngularJS Http 请求同步处理?

Javascript new Map 返回对象的引用?

javascript - 如何用标签包装 var img = new image ?