Skip to main content
 首页 » 编程设计

angularjs之ng-click 不会从模板内触发

2024年08月12日4Free-Thinker

在 AngularJS 中,可以从模板内调用方法,而无需使用指令或路由提供程序来绑定(bind)范围吗?

我的具体问题是我的主 Controller (AppCtrl) 位于索引页的正文上。在索引上,我使用 ngView 根据路由拉入模板。除了默认模板之外,每个routeProvider都有自己的 Controller 。我假设由于范围继承,我可以使用模板中 AppCtrl 定义的方法,但尝试只执行简单的警报或 console.log 不会注册任何内容。我知道 $scope 正在访问模板,因为我的数据显示正确。

这似乎是一个 $scope 问题,但我不确定如何解决它。我需要创建一个指令来显式绑定(bind)它们吗?

index.html

<body ng-controller="AppCtrl"> 
   <div ng-view></div> 
</body> 

app.js

var myApp = angular.module('myApp', []) 
.config(function($routeProvider) { 
  .when('/', { 
    templateUrl: 'partials/list.html' 
  }), 
  .when('/info/:id, { 
    templateUrl: 'partials/info.html' 
    controller: 'InfoCtrl' 
  }); 
}); 

Controller .js

var controllers = {}; 
controllers.AppCtrl = function($scope, $location, Factory) { 
  ... 
  $scope.doSomething = function() { 
    alert('hello'); 
  }; 
}; 
myApp.controller(controllers); 

列表.html

<a href="#" ng-click="doSomething()">Do Something</a> // no response 

请您参考如下方法:

我似乎找到了问题的根源。如上所述,使用函数确实有效。当我回去解决我的具体问题时,该功能再次拒绝工作。事实证明,这不是范围问题,而是绑定(bind)问题。我给出的例子并不准确,但确实帮助我隔离了问题。我将演示:

<!-- alert fires, tries to find '#' in location, binded values do not update --> 
<a href="#" ng-click="addOne()">Add 1</a>  
 
<!-- key binding does not update --> 
<a href="#" ng-click="key = key+1" ng-init="key=0">Add 1</a> 
 
<!-- key updates --> 
<a ng-click="key = key+1" ng-init="key=0">Add 1</a> 

无论出于何种原因,包含 href 都会阻止绑定(bind)值更新。有谁知道是否有一个“preventDefault”可以用作解决方法,以便可以包含 href 进行验证?看来这要么是一个错误,要么 ng-click 只能与按钮一起使用。