为什么ng-checked会在页面加载时触发两次

时间:2016-06-21 15:25:28

标签: javascript angularjs

我有以下代码,似乎ng-checked在页面加载时两次触发我的简单警报方法。

(function() {
  'use strict';

  angular.module('app', ['common.ajax']);
  angular.module('common.ajax', []);

  angular
    .module('app')
    .controller('loginCtrl', controller);

  controller.$inject = ['$scope', 'ajaxFactory'];

  function controller($scope, ajaxFactory) {
    $scope.alertme = activate;

    function activate() {
      ajaxFactory.getData();
    }
  }

  angular
    .module('common.ajax')
    .factory('ajaxFactory', factory);

  factory.$inject = ['$http'];

  function factory($http) {
    var service = {
      getData: getData
    };

    return service;

    function getData() {
      alert("click me");
    }
  }
})();
<script data-require="angular.js@1.5.6" data-semver="1.5.6" src="https://code.angularjs.org/1.5.6/angular.min.js"></script>

<body ng-app="app" ng-controller="loginCtrl">
  <input type="checkbox" ng-checked="alertme()" ng-model="tester" />
</body>

我刚刚开始我的Angular旅程,所以关于为什么会发生这种情况的任何信息都会很棒,因为我似乎无法在网上找到任何东西。

2 个答案:

答案 0 :(得分:2)

我认为您使用ng-click而不是ng-checked。

查看文档:{​​{3}}

ngChecked是一个布尔参数,而不是一个函数。

  

如果ngChecked中的表达式是真实的,则在元素上设置checked属性。

答案 1 :(得分:0)

ngChecked可以将一个函数作为一个参数,只要该函数返回一个真实或伪造的值,如下所示:

const isGreaterThanOne = x => x > 1;

<body ng-app="app" ng-controller="loginCtrl">  
    <input type="checkbox" ng-checked="isGreaterThanOne(2)" ng-model="tester" />
</body>