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

在angularjs控制器中调用了两次函数

诸葛柏
2023-03-14
问题内容

我是angular js的新手,目前仍然遇到非常有线的bug。控制器中的函数在按路由加载视图调用时会运行两次。

http://html" target="_blank">jsfiddle.net/4gwG3/5/

您将看到两次警报!

我的观点很简单

我的应用程序代码如下

var IB = angular.module('IB', []);

//channel controller
IB.controller('channelsController', function ($scope, $routeParams) {
    $scope.greet = function () {
        alert('hi');
    };
});


IB.config(function ($routeProvider) {
    $routeProvider
    .when('/channels', {
        controller: 'channelsController',
        template: '{{greet()}}'
    })

    .otherwise({ redirectTo: '/channels' });

});

问题答案:

首先检查您是否没有两次初始化Angular应用程序(通过使用 ng-app 自动进行初始化)。

一次,我有2个带有ng-app的html页面(一个用于login.html,另一个用于main.html),这是我后来意识到的一个问题。

其次,对我来说,最重要的是,检查您是否已将控制器附加到多个元素。如果使用 路由, 这是一种常见情况。

就我而言,我像这样导航到DashboardController:

app.config(function($routeProvider){
    $routeProvider
    .when('/', {
        controller: 'DashboardController',
        templateUrl: 'pages/dashboard.html'
    })
});

但是我在dashboard.html中也有这个:

<section class="content" ng-controller="DashboardController">

它指示AngularJS两次消化我的控制器。

要解决此问题,您有两种方法:

像这样从您的html文件中删除 ng-controller

<section class="content">

或从路由中删除 控制器 (通常位于app.js中):

app.config(function($routeProvider){
$routeProvider
        .when('/', {
            templateUrl: 'pages/dashboard.html'
        })
    });


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

  • 问题内容: 我单击时有一个下面的按钮,显示一个小的弹出窗口,如通知 我的意图是每隔几秒钟显示一次此弹出窗口,而不用单击按钮,而是从AngularJS控制器显示。 尝试以下解决方案 还包括脚本 使用这样的指令 我看到一个错误“对象没有方法弹出窗口” 问题答案: 伪指令用于DOM操作: 和指令

  • 问题内容: 我了解AngularJS会在某些代码中运行两次,有时甚至更多,例如事件,不断检查模型状态等。 但是我的代码: 执行两次,将2条记录插入我的数据库。很显然,我一直在为此奋斗,我一直在学习! 问题答案: 应用路由器将导航指定为如下所示: 但我在: 这使控制器消化了两次。从HTML中删除属性可以解决此问题。或者,可以从路由指令中删除该属性。 使用选项卡式导航时也会出现此问题。例如,可能包含:

  • 问题内容: 代码很简单: 您会看到这里有一个函数,我们只在体内调用它一次。但是在控制台中,它打印两次: 您可以在此处观看现场演示:http : //plnkr.co/edit/tb8RpnBJZaJ73V73QISC?p=preview 为什么该函数已被调用两次? 问题答案: 在AngularJS中,用大括号括起来的任何东西都是一个在摘要循环 中至少 被求值 一次 的表达式。 __ Angular

  • 问题内容: 我需要在Angular js中的另一个控制器中调用函数。如何可能的方式请提前帮助我 代码: 问题答案: 控制器之间的通信通过+ / + 方法完成。 因此,在您的情况下,您想在Controller“Two”中调用Controller“One”的方法,执行此操作的正确方法是: 在被调用时,您可以发送任何数据作为第二个参数。

  • 问题内容: 我遇到了一个问题,我想绑定到ng-repeat循环内的函数的输出。我发现该函数每个项目被调用两次,而不是我期望的那样。这是ng- repeat部分(请注意最后的calcRowTotal()调用): calcRowTotal()函数如下所示: 接下来显示其中一个要迭代的项目的示例: 我在控制台中看到以下内容(我正在遍历的集合中当前有两项): 我当然可以做一个“ rowTotal”属性,但