使用插值时,控制器功能被调用两次

时间:2016-06-28 04:28:51

标签: javascript angularjs angularjs-scope angularjs-interpolate

我有一个非常简单的应用程序,我试图调用我的控制器的功能,如下所示

 var app=angular.module('test',[])
 app.controller('ctrl',function($scope){
 $scope.func=function(){
    alert('hi')
  }
})

这就是我称之为

的方式
  <body ng-app='test' >
    <h1 ng-controller='ctrl'>{{func()}}</h1>

  </body>

我面临的问题是我的功能被调用了两次。

阅读SO上的很多帖子,这个问题背后的原因主要与您的应用配置或路由配置有关,如果您为不同的视图配置了相同的控制器,或者如果您的应用初始化两次,那么您将面临此问题

但就我而言,我没有任何此类案件,但我仍然面临这个问题。

2 个答案:

答案 0 :(得分:3)

使用{{func()}},您将在 func 功能上创建监视,每次摘要周期运行时,都会调用func

演示演示:

var app = angular.module('test', [])
app.controller('ctrl', function($scope) {
  $scope.val = 100;
  $scope.func = function() {
    alert($scope.val)
  };
  $scope.add = function(a) {
    return ++$scope.val;
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.14/angular.min.js"></script>

<body ng-app='test'>
  <h1 ng-controller='ctrl'>
    {{func()}}
    {{add()}}
  </h1> 
</body>

Fiddle demo to play with

答案 1 :(得分:0)

func()的目的是什么?

是否可以绑定变量而不是直接调用函数?

var app=angular.module('test',[])
 app.controller('ctrl',function($scope) {
   function func() { // called in the future
     $scope.funcValue = 'My Title';
   }
})

HTML:

<body ng-app='test' >
    <h1 ng-controller='ctrl'>{{ funcValue }}</h1>
</body>