当前位置: 首页 > 面试题库 >

对抗AngularJS执行控制器两次

司徒焕
2023-03-14
问题内容

我了解AngularJS会在某些代码中运行两次,有时甚至更多,例如$watch事件,不断检查模型状态等。

但是我的代码:

function MyController($scope, User, local) {

var $scope.User = local.get(); // Get locally save user data

User.get({ id: $scope.User._id.$oid }, function(user) {
  $scope.User = new User(user);
  local.save($scope.User);
});

//...

执行两次,将2条记录插入我的数据库。很显然,我一直在为此奋斗,我一直在学习!


问题答案:

应用路由器将导航指定为MyController如下所示:

$routeProvider.when('/',
                   { templateUrl: 'pages/home.html',
                     controller: MyController });

但我在home.html

<div data-ng-controller="MyController">

这使控制器消化了两次。data-ng- controller从HTML中删除属性可以解决此问题。或者,controller:可以从路由指令中删除该属性。

使用选项卡式导航时也会出现此问题。例如,app.js可能包含:

  .state('tab.reports', {
    url: '/reports',
    views: {
      'tab-reports': {
        templateUrl: 'templates/tab-reports.html',
        controller: 'ReportsCtrl'
      }
    }
  })

相应的报告选项卡HTML可能类似于:

<ion-view view-title="Reports">
  <ion-content ng-controller="ReportsCtrl">

这也将导致控制器运行两次。



 类似资料:
  • 主要内容:AngularJS 控制器,AngularJS 实例,控制器方法,AngularJS 实例,外部文件中的控制器,AngularJS 实例,其他实例,AngularJS 实例 AngularJS 控制器 控制 AngularJS 应用程序的数据。  AngularJS 控制器是常规的 JavaScript 对象。 AngularJS 控制器 AngularJS 应用程序被控制器控制。 ng-controller 指令定义了应用程序控制器。 控制器是 JavaScript 对象,由标准的

  • 问题内容: 模块路线: 控制器: HTML: 每次我单击超链接’‘时,“ BuildInfoController”将被调用两次。我在这里想念什么吗? 问题答案: 我遇到了同样的问题,并且似乎存在与路由有关的愚蠢错误。正在进行某种重定向。 为了解决这个问题,我在href中添加了一个斜杠,例如: 我希望它也会为您解决问题。

  • 问题内容: 我是angular js的新手,目前仍然遇到非常有线的bug。控制器中的函数在按路由加载视图调用时会运行两次。 http://jsfiddle.net/4gwG3/5/ 您将看到两次警报! 我的观点很简单 我的应用程序代码如下 问题答案: 首先检查您是否没有两次初始化Angular应用程序(通过使用 ng-app 自动进行初始化)。 一次,我有2个带有ng-app的html页面(一个用

  • 问题内容: 对于我一生,我无法让$ httpBackend在执行$ http get请求的控制器上工作。我已经尝试了几个小时=) 我将其简化为下面可以最简单的形式。如果我通过测试 在控制器中注释掉$ http.get()请求 在测试中注释掉“ httpMock.flush()” 并更改“猪”和“狗”以匹配 也就是说,这是一个有效的工作测试和应用程序。 如果放回去,则会在底部显示错误。 app /

  • 本文向大家介绍AngularJS控制器继承自另一控制器,包括了AngularJS控制器继承自另一控制器的使用技巧和注意事项,需要的朋友参考一下 AngularJS里控制器继承,常用的就是作用域嵌套作用域。默认情况下,当前作用域中无法找到某个属性时,就会在父级作用域中进行查找,若找不到直至查找到$rootScope。 但有些情况下,rootScope下就是我们的controller,不可能将大量的公

  • 问题内容: 目前,我有一个Angular.js页面,它允许搜索并显示结果。用户单击搜索结果,然后单击“后退”按钮。我希望再次显示搜索结果,但是我不知道如何触发搜索执行。详细信息如下: 我的Angular.js页面是一个搜索页面,带有一个搜索字段和一个搜索按钮。用户可以手动键入查询并按下按钮,然后会触发ajax查询并显示结果。我用搜索词更新了网址。一切正常。 用户单击搜索结果,然后转到另一个页面-效