在AngularJS中,可以从模板中调用方法而不使用指令或routeProvider来绑定范围吗?
我的具体问题是我的主控制器(AppCtrl)位于索引页面的主体上。在索引上我使用ngView根据路由提取模板。除默认模板外,每个routeProvider都有自己的控制器。我假设由于范围继承,我可以使用模板中的AppCtrl定义的方法,但尝试只做一个简单的警报或console.log不注册任何东西。我知道$ scope正在进入模板,因为我的数据显示正确。
这似乎是一个范围问题,但我不确定如何解决它。我是否需要创建一个指令来显式绑定它们?
的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'
});
});
controllers.js
var controllers = {};
controllers.AppCtrl = function($scope, $location, Factory) {
...
$scope.doSomething = function() {
alert('hello');
};
};
myApp.controller(controllers);
list.html
<a href="#" ng-click="doSomething()">Do Something</a> // no response
答案 0 :(得分:3)
我似乎找到了问题的根源。如上所述,使用函数确实有效。当我回去解决我的具体问题时,该功能再次拒绝工作。事实证明,这不是范围问题,而是一个绑定问题。我给出的例子不准确,但确实帮我隔离了问题。我将演示:
<!-- 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都会阻止绑定值更新。有没有人知道是否有“preventDefault”可以用作解决方法,以便可以包含hrefs进行验证?似乎这是一个bug或ng-click仅用于按钮。