javascript

git

java

python

git-remote

c++

github

django

c#

reactjs

variables

var

loops

iteration

std

c++-faq

git-checkout

generator

coroutine

spring-mvc

html5-Angular JS缩放和性能

我们正在使用为银行构建的Angular应用程序来应对性能问题。

不幸的是,显示代码片段违反了合同。 无论如何,我可以描述正在进行的一些主要问题,我希望可以推荐最佳实践。

应用结构:

  • 本质上,是一个巨大的多表单页面。
  • 每种形式都是其自己的部分,带有嵌套的控制器和大约3层深的部分。
  • 在json对象的集合上重复ng相同的形式。
  • 每个表单都绑定到重复的对象/模型。
  • 我们应该支持该页面上1-200个表格中的任何一个。

如果您看一下时间线。 我们在jQuery parse html方法,jQuery重新计算stye方法,GC事件(垃圾收集)上花费了大量时间。 我想将这些最小化应该可以加快速度。 它们都是Angular生命周期的一部分,但是可能有更好的方法来避免它们。 这是探查器的一些屏幕截图:

Recalculate Style GC Event

最终,随着重复表单的数量超过5,该应用程序变得迟钝。每种表单相对于其他表单都没有关系。 我们试图不监视表单之间的任何共享属性。

trans by 2020-08-12T10:38:40Z

javascript-在angularjs ng-change事件中检测复选框是否处于选中状态

我想检测在单击复选框时是否选中了该复选框。

这就是我所拥有的:

<input type="checkbox" ng-model="answers[item.questID]" ng-change="stateChanged()" />

然后在控制器中,我有:

$scope.stateChanged = function () {
    alert('test');
}

我可以在选中/取消选中时触发警报,但是如何检测复选框的状态? 我做了一些研究以找到类似的问题,但是我无法获得所需的东西。

谢谢,拉齐奥

trans by 2020-08-10T05:39:24Z

javascript-$ scope。$ root和$ rootScope有什么区别?

我在控制器中看到$ scope有$ root,这是什么? 与可以注入控制器的$ rootScope有何不同?

trans by 2020-08-08T14:32:26Z

AngularJS访问控制器$ scope从外部

var theApp = angular.module('theApp', []);
var app = angular.module('theApp', ['ui.bootstrap']);
app.controller('MenuSideController', ['$scope','SnazzyService','$modal','$log', function($scope, SnazzyService, $modal, $log) {
    $scope.user.zoomlvl = '2';
}]);

我有上面的控制器,它设置了MenuSideController,我只能从内部访问这些值。

但是我在某处看到可以使用下面的内容访问MenuSideController,但是当我valZoom $scope.user.zoomlvl不存在时。

我无法弄清楚如何访问MenuSideController $ scope并使用valZoom变量进行更新。

var appElement = document.querySelector('[ng-app=theApp]');
var $scope = angular.element(appElement).scope();
console.log($scope);
$scope.$apply(function() {
    $scope.user.zoomlvl = valZoom;
});
trans by 2020-08-05T15:12:06Z

替代Angular 2.0中的$ scope

在Angular 2.0中,不会有controller as

有什么替代方法? 如何在组件之间共享数据? controller as选项在指令中可用吗? 实际上,是否有我可以熟悉的替代方法?

我知道controller as,但我知道控制器也将被淘汰。

对这种革命感到困惑的是,Angular团队已经开始了。

trans by 2020-07-28T20:30:52Z

使用AngularJS中的“作用域”从另一个控制器调用一个控制器的方法

我试图通过使用rest_id变量在第一个控制器中调用第二个控制器的方法。 这是我的第一个控制器中的一种方法:

$scope.initRestId = function(){
        var catapp = document.getElementById('SecondApp');
        var catscope = angular.element(catapp).scope();
        catscope.rest_id = $scope.user.username;
        catscope.getMainCategories();
    }; 

我可以设置rest_id的值,但是由于某些原因我无法调用getMainCategories。 控制台显示此错误:

TypeError:对象#没有方法'getMainCategories'

有没有一种方法可以调用上述方法?

编辑:

我使用以下方法同时加载两个应用程序。

angular.bootstrap(document.getElementById('firstAppID'), ['firstApp']);
angular.bootstrap(document.getElementById('secondAppID'), ['secondApp']);

我肯定可以在这里使用服务,但是我想知道是否还有其他选择可以做到这一点!

trans by 2020-07-25T16:17:48Z

angularjs-使用Controller As方法访问继承的范围

使用定义控制器的原始方法,访问父级的作用域非常简单,因为子级作用域原型继承自其父项。

app.controller("parentCtrl", function($scope){
   $scope.name = "Parent";
})
.controller("childCtrl", function($scope){
   $scope.childName = "child of " + $scope.name;
});

<div ng-controller="parentCtrl">
   {{name}}
   <div ng-controller="childCtrl">
      {{childName}}
   </div>
</div>

Controller-As方法似乎是声明控制器的推荐方法。 但是,对于Controller-A,上述方法不再有效。

当然,我可以从View使用pc访问父范围:

<div ng-controller="parentCtrl as pc">
   {{pc.name}}
   <div ng-controller="childCtrl as cc">
      {{cc.childName}}
   </div>
</div>

我确实对此有一些问题(可能是意大利面条代码),但是这个问题是关于从子控制器访问父作用域的。

我看到此工作的唯一方法是:

app.controller("parentCtrl", function(){
   this.name = "parent";
})
.controller("childCtrl", function($scope){
   $scope.pc.name = "child of " + $scope.name;
   // or
   $scope.$parent.pc.name = "child of " + $scope.name;

   // there's no $scope.name
   // and no $scope.$parent.name
});

因此,现在,子控制器需要了解“ pc”-除外(在我看来),这仅限于视图。 我认为子控制器不应该知道视图决定声明ng-controller="parentCtrl as pc"的事实。

问:那么什么是正确的方法?

编辑:

澄清:我不是要继承父控制器。 我希望继承/更改共享范围。 因此,如果要修改第一个示例,则应该能够执行以下操作:

app.controller("parentCtrl", function($scope){
   $scope.someObj = {prop: "not set"};
})
.controller("childCtrl", function($scope){
   $scope.someObj.prop = "changed";
});
trans by 2020-07-23T14:34:48Z

javascript-AngularJS:选择非两向绑定到mod

我正在使用选择显示客户名称。 用户应该能够选择现有的客户端,然后将更新范围属性:

控制者

初始化“首选”。

if($scope.clients.length > 0) $scope.existingClient = $scope.clients[0];

视图

<select
    id='nm-existing-client-name'
    class='form-control  input-lg'
    ng-model='existingClient'
    ng-options="client.name for client in clients">
</select>

选择菜单更改时,范围属性ng-change不会更改。 如果没有初始化任何值(删除了上面的控制器行),则2956298027528628619009的值将保持不确定。

值更改时,将触发附加2956298027528628619008,但模型本身不会更新为新值。

我正在使用AngularJS v1.2.0-rc.3。

trans by 2020-07-07T18:33:45Z

AngularJS:如何在角度应用程序中嵌套应用程序

我一直在从事一个更像框架的项目,并且可以安装几个应用程序/模块。 像基本的应用商店或google.play商店一样看到它。 这是一个Intranet应用程序,所有模块都可以添加到您的用户帐户中。

该框架已经在开发中,但是我现在正在围绕应用程序/模块的想法。 (链接到开发中的概念证明,可以在这里找到)

应用程序应该有点独立,并且不能突然包含框架中的脚本,这可以通过在单独的模块中进行结构化来完全实现,如下所示:

angular.module('myApp', []);

但是,一个应用程序可以具有模板,脚本,css,并且可以在单独的服务器上运行,因此我正在寻找一种最佳方法来获取脚本和cssfile并将其动态加载到应用程序中 当用户从框架内启动AppController时。

  • 目前,我正在构建应用程序,就好像它们具有一个主模板一样,例如AppController,为简单起见,我将每个应用程序的脚本捆绑到1个脚本文件中,因此也要包含$scope

该框架包含一个用于加载应用程序的模板,以及一个AppController。该模板包含以下内容:

<div data-ng-controller="AppController" data-ng-include="app.appTemplate">
    <div>loading...</div>
</div>

它基本上绑定到AppController,在加载所有脚本时会更新该内容,因此首先显示一个加载模板,然后在页面中包含脚本后,将$scope更新为应用程序的上述主模板。

在加载第一个索引模板时,该模板当前已从框架中加载了AppController,因此它正在使用框架的$scope,而不是其自身的脚本。

我仍然必须以某种方式启动应用程序自己的angular模块,并让它自己运行,而无需在框架中运行任何东西以使其“正常运行”

我仍然在想如何最好地加载依赖的javascript文件(可能会使用requrejs或其他依赖加载器),但是我目前不知道如何在不从框架的AppController内部工作的情况下“启动”应用程序

编辑

我创建了一个小型演示项目来展示手头的问题,当该项目执行一些硬编码时,可以在git-hub上看到完整的代码,这样的想法是当我得到证明时,对那些硬编码进行编码 概念正确,现在所有关于在框架内加载应用程序。 如果可能的话,我可以考虑从哪里获取URL和应用程序名称。

trans by 2020-06-26T10:54:20Z

javascript-AngularJS-获取元素属性值

如何获得元素属性值?

例如HTML元素:

<button data-id="345" ng-click="doStuff($element.target)">Button</button>

JS:

function doStuff(item){
    angular.element(item)[0].data('id'); // undefined is not a function
}

任何建议,不胜感激,此处的JSFIDDLE演示:[http://jsfiddle.net/h3TFy/]

trans by 2020-06-23T09:44:59Z

如何在Angular中调用另一个作用域函数

在AngularJS中,我在控制器中有2个作用域函数,

$scope.fn1 = function(){
//do something A
};

$scope.fn2 = function(){
    //do something B
    //I want to call fn1 here.
};

如果我的fn2要呼叫fn1,该怎么办? 谢谢!

trans by 2020-06-22T09:35:16Z

AngularJS-指令链接函数中的$ rootScope

我问这个问题是因为我不太清楚如何将rootscope视为传递给指令的依赖项

我有一条指令需要显示$ rootScope的一些信息...

我以为我需要将$ rootScope传递给指令,但是当我编写这样的指令时,它似乎可以工作。

.directive("myBar", function () {
 return {
    restrict: "E",
    transclude: true,
    replace: true,
    template:   '<div>' + 
                '<span ng-transclude></span>' + 
                '{{rsLabels.welcome}} {{rsUser.firstName}}!' + 
                '</div>'
}
})

我什么时候需要这样做?

.directive("myBar", function ($rootScope) {
 return {
    restrict: "E",
    transclude: true,
    replace: true,
    template:   '<div>' + 
                '<span ng-transclude></span>' + 
                '{{rsLabels.welcome}} {{rsUser.firstName}}!' + 
                '</div>'
}
})

如果在指令的链接函数中需要rootScope,我可以和如何使用rootScope?还是应该在指令的控制器中使用rootScope?

.directive("myBar", function ($rootScope) {
 return {
    restrict: "E",
    transclude: true,
    replace: true,
    link: function (scope, element, attrs, rootScope) {
        rootScope.rsUser = { firstName: 'Joe' };
        rootScope.rsUser = { welcome: 'Welcome' };
    },
    template:   '<div>' + 
                '<span ng-transclude></span>' + 
                '{{rsLabels.welcome}} {{rsUser.firstName}}!' + 
                '</div>'
}
})

我的rootScope数据在运行功能中定义

 .run(function ($rootScope) {

  $rootScope.rsLabels = { 
      welcome: 'Welcome'
  };

  $rootScope.rsUser = { 
     firstName: 'Joe'
  };
});

谢谢!

trans by 2020-02-21T05:52:13Z

javascript-AngularJS的$ watch函数如何工作?

如今,我正在阅读有关AngularJS的很多文章,并且遇到了神奇的$ watch函数。 我知道如何使用它,但是我想知道它是如何在后台实现的。 是时间间隔功能吗? 还是Angular在每个执行的语句中都将其称为Watch?

我现在不想深入研究源代码,如果你们中的一个人已经知道答案并想分享他对该主题的知识,我将感到很高兴。

谢谢。

trans by 2020-02-16T00:44:13Z

AngularJs广播重复执行太多次

在我的一个Angular控制器中,我有这个:

// controller A
$rootScope.$on("myEventFire", function(event, reload) {
    someAction();
});

在另一个控制器中,我有这个:

// controller B
$scope.openList = function(page) {
    $rootScope.$broadcast('myEventFire', 1);
}

现在,这是一个单页应用程序。 当我最初进入控制器A并尝试触发此事件时,someAction()将被执行一次。 如果我离开并再次返回到控制器A并执行相同的操作,则someAction()将执行两次。 如果我再次执行此操作,则会发生3次,依此类推。我在这里做错了什么?

trans by 2020-01-15T20:31:22Z

AngularJS:DirectI中的广播事件

我见过人们从他们的代码中的任何地方都这样做:

$rootScope.$broadcast('someEvent', someParameter); 

然后在某些控制器中:

$rootScope.$on('someEvent', function(event, e){ /* implementation here */ });

现在,我想广播指令中的事件。 在rootScope级别广播它是一种好习惯吗? 我想在控制器中处理此事件。 我可以使用$ scope还是仍然必须在$ rootScope上收听?

trans by 2020-01-07T20:06:32Z

范围销毁时,应该删除有角的$ watch吗?

当前正在从事一个项目,在该项目中,当我们不从被破坏的示波器中清除广播订阅时,会发现大量内存泄漏。 以下代码已解决此问题:

var onFooEventBroadcast = $rootScope.$on('fooEvent', doSomething);

scope.$on('$destroy', function() {
    //remove the broadcast subscription when scope is destroyed
    onFooEventBroadcast();
});

这种做法也应该用于手表吗? 下面的代码示例:

var onFooChanged = scope.$watch('foo', doSomething);

scope.$on('$destroy', function() {
    //stop watching when scope is destroyed
    onFooChanged();
});
trans by 2020-01-05T00:14:34Z

对Angularjs混淆并隔离范围和绑定感到困惑

我在努力理解模型的范围及其对有限范围的指令的绑定。

我知道限制指令的范围意味着controller。$ scope和directive.scope不再是同一件事。 但是,我对在指令模板内或在html中放置模型如何影响数据绑定感到困惑。 我觉得我缺少一些非常基本的东西,因此我需要理解这一点。

采取以下代码(在这里拨弄:[http://jsfiddle.net/2ams6/)]

的JavaScript

var app = angular.module('app',[]);
app.controller('Ctrl',function($scope){
});
app.directive('testel', function(){
    return {
        restrict: 'E',
        scope: {
            title: '@'
        },
        transclude: true,
        template:   '<div ng-transclude>'+
                    '<h3>Template title: {{title}}</h3>' +
                    '<h3>Template data.title:{{data.title}}</h3>' +
                    '</div>'
    }    
}); 

的HTML

<div ng-app='app'>
    <div ng-controller="Ctrl">
        <input ng-model="data.title">
        <testel title="{{data.title}}">
            <h3>Transclude title:{{title}}</span></h3>
            <h3>Transclude data.title:{{data.title}}</h3>
        </testel>
    </div>
</div>

该模型仅更新模板中的{{data.title}}和包含中的{{data.title}}。 为什么不能在包含中包含{{data.title}},也不能在模板中不含{{data.title}}

像这样将输入移动到包含范围内(在这里拨弄:[http://jsfiddle.net/eV8q8/1/):]

<div ng-controller="Ctrl">
    <testel title="{{data.title}}">
        <input ng-model="data.title">
         <h3>Transclude title: <span style="color:red">{{title}}</span></h3>

         <h3>Transclude data.title: <span style="color:red">{{data.title}}</span></h3>

    </testel>
</div>

现在意味着仅更新{{data.title}}。 为什么既不要模板{{data.title}}{{data.title}},又不能排除{{title}}

最后,将输入移动到模板中,如下所示(在这里进行小提琴:[http://jsfiddle.net/4ngmf/2/):]

template: '<div ng-transclude>' +
            '<input ng-model="data.title" />' +
            '<h3>Template title: {{title}}</h3>' +
            '<h3>Template data.title: {{data.title}}</h3>' +
            '</div>'

现在意味着仅更新{{data.title}}模板。 同样,为什么不另外3个绑定呢?

我希望有明显的东西盯着我,我想念它。 如果您能得到我的帮助,我会给您买啤酒,或给您一些积分或其他类似的东西。 非常感谢。

trans by 2019-12-25T19:09:36Z

如何从angularjs中的另一个控制器调用函数?

这个问题已经在这里有了答案:

  • 一个AngularJS控制器可以调用另一个吗?                                     13个答案
  • 如何将一个控制器注入到AngularJS中的另一个控制器中                                     7个答案

我需要在Angular js中的另一个控制器中调用函数。如何可能的方式请提前帮助我

代码:

app.controller('One', ['$scope',
    function($scope) {
        $scope.parentmethod = function() {
            // task
        }
    }
]);
app.controller('two', ['$scope',
    function($scope) {
        $scope.childmethod = function() {
            // Here i want to call parentmethod of One controller
        }
    }
]);
trans by 2019-12-24T16:25:58Z

angularjs-$ watch未在数组chang上触发

我试图弄清楚为什么我的tasks没有被触发。 这是相关控制器的片段:

$scope.$watch('tasks', function (newValue, oldValue) {
    //do some stuff
    //only enters here once
    //newValue and oldValue are equal at that point
});

$scope.tasks = tasksService.tasks();

$scope.addTask = function (taskCreationString) {
    tasksService.addTask(taskCreationString);//modifies tasks array
};

我认为tasks显然已正确更新,因为我将其长度限制如下:

<span>There are {{tasks.length}} total tasks</span>

我错过了什么?

trans by 2019-11-16T13:30:33Z

javascript-如何在angularjs ui路由器中的状态之间共享$ scope数据?

在不使用服务或在父控制器中构造观察程序的情况下,如何使子状态可以访问主控制器的2539772576946944096256。

  .state("main", {
      controller:'mainController',
      url:"/main",
      templateUrl: "main_init.html"
  })  
  .state("main.1", {
      controller:'mainController',
      parent: 'main',
      url:"/1",
      templateUrl: 'form_1.html'
  })  
  .state("main.2", {
      controller:'mainController',
      parent: 'main',
      url: "/2",
      templateUrl: 'form_2.html'
  })  

我无法在子状态下访问mainController范围-或者我正在获取该范围的另一个实例-不是我想要的。 我觉得我缺少一些简单的东西。在状态对象中有一个共享的数据配置选项,但是我不确定是否应该将其用于这样的事情。

trans by 2019-09-24T10:12:37Z

1 2 3 4 下一页 共4页