Angularjs:控制器初始化函数避免调用init

时间:2014-07-13 00:35:42

标签: angularjs angularjs-controller

我有以下控制器代码:

applicationControllers.controller('PostsController', ['$scope', '$http', function 

($scope, $http) {
  var page = 1;

  $scope.init = function() {
    this.loadPage(page);
  }

  $scope.nextPage = function() {
    page++;
    this.loadPage(page);
  }

  $scope.previousPage = function() {
    page--;
    if (page <= 0) { page = 1 }
    this.loadPage(page);
  }

  $scope.filterByProvince = function(provinceName) {
    console.log(provinceName);
  }

  $scope.loadPage = function(page) {
    $http.get('/posts.json?page=' + page).success(function(data) {
      $scope.posts = data;
    });
  }

  $scope.init();
}]);

问题是当使用ng-click指令filterByProvince(&#39; test&#39;)时,似乎也调用了init函数。我想避免这种行为。

任何帮助?

1 个答案:

答案 0 :(得分:1)

在Angular中,如果您想要<a>元素显示为<a>元素,但使用方式不同(例如作为按钮(通过附加一些ngClick指令)),应该使用空的href

<a href="" ng-click="doSomething()">Do something</a>

使用href="#"的问题在于它是:

  1. ngRoute(如果使用)识别为&#34;链接&#34;到主路线('/'),所以即使你在那条路线上它也会被重新加载,导致ngClick回调的效果无效或

  2. 浏览器将其识别为同一页面的锚标记链接,因此单击它会导致页面重新加载(再次排除ngClick回调的任何影响。)


  3. <子> 我不确定ui-router如何处理这个问题,但我不是ui-router的忠实粉丝 - 也许有经验丰富的人可以提供一些反馈。