4

在 AngularJS 中,是否可以在没有指令或 routeProvider 的情况下从模板中调用方法来绑定范围?

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

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

索引.html

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

应用程序.js

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

控制器.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
4

1 回答 1

4

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

<!-- 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”,以便可以包含h​​refs进行验证?这似乎是一个错误或 ng-click 仅用于按钮。

于 2013-05-30T13:26:14.997 回答