我有一个自定义指令,它从网络服务调用加载导航 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/