Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将一个ng控制器分配给两个不能工作的元素。

将一个ng控制器分配给两个不能工作的元素。
EN

Stack Overflow用户
提问于 2015-01-17 20:17:01
回答 2查看 577关注 0票数 1

我是刚接触过安古拉杰的人,我来到了一个很有趣的问题上:

我有以下代码:

代码语言:javascript
运行
AI代码解释
复制
<body ng-app="app" ng-controller="table">
<div id="clcikbtn"
    style="background-color: black; width: 20px; height: 20px;"
    ng-click="addTable()"></div>
<table class="table table-hover">
    <thead>
        <tr>
            <th>item</th>
            <th>price</th>
            <th>number</th>
            <th>edit</th>
        </tr>
    </thead>
    <tbody>
        <tr ng-repeat="x in typesHash">
            <td>{{x.name}}</td>
            <td>{{x.price}}</td>
            <td>{{x.unit}}</td>
            <td>edit</td>
        </tr>
    </tbody>
</table>

代码运行良好的完整版本如下:

工作版本

如您所见,正文中只有一个ng-控制器=“table”,它同时控制按钮和表,单击按钮后,一行将添加到表中,但我希望上面的版本如下所示:

代码语言:javascript
运行
AI代码解释
复制
<body ng-app="app">
<div id="clcikbtn"
    style="background-color: black; width: 20px; height: 20px;"
    ng-controller="table" ng-click="addTable()"></div>
<table class="table table-hover" ng-controller="table">
    <thead>
        <tr>
            <th>item</th>
            <th>price</th>
            <th>number</th>
            <th>edit</th>
        </tr>
    </thead>
    <tbody>
        <tr ng-repeat="x in typesHash">
            <td>{{x.name}}</td>
            <td>{{x.price}}</td>
            <td>{{x.unit}}</td>
            <td>edit</td>
        </tr>
    </tbody>
</table>

正如您可以看到的,所有的内容都是相同的,但是对于表和div,只有ng控制器= table,并且代码在页面加载时工作,但是在单击按钮之后,没有发生任何事情,下面是指向代码的链接:

不工作版本

我不知道为什么第二个版本不工作,其实我需要第二个版本工作,谁能帮我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-17 20:31:31

你的代码有效了。控制器不是单节点,您只需创建两个控制器和两个作用域。更新其中的值不会影响另一个值。您需要创建一个单例来保存这些值;在角度世界中,最好用一个.factory()来实现。

编辑

这个柱塞展示了一个完整的示例,并对代码风格进行了一些改进;)

工厂可能是这样的:

代码语言:javascript
运行
AI代码解释
复制
.factory('tableService', function () {
  var dataContainer = [{
    name: 'sugar',
    price: 1,
    unit: 1
  }, {
    name: 'lemon',
    price: 100,
    unit: 2.5
  }];
  var service = {
    data: data,
    add: add
  };
  return service;
  function data() {
    return dataContainer;
  }
  function add(data) {
    dataContainer.push(data);
  }
})

对于您的示例,我只需将整个表与其控件包装在一个HTML元素和一个Controller中即可。虽然我给出的柱塞说明了如何在两个控制器之间进行通信。

票数 1
EN

Stack Overflow用户

发布于 2015-01-17 20:50:12

您的第二个版本存在一些问题(考虑到您正在努力完成的任务)。

当控制器被注入角时,它每次都实例化该控制器的一个新实例。这意味着您的代码实际上使用了两个不同的table控制器。因此,控制器不能在实例之间维护数据。它们扮演视图模型的角色,并为分配给它的视图维护自己的范围。

为了说明作用域,我将您的代码放在下面的代码段中,并将ng-controller移到了一个级别。您可以看到,单击第一个按钮将添加到第一个网格中,而保留第二个网格,反之亦然。

代码语言:javascript
运行
AI代码解释
复制
 var app = angular.module('app', []);


 app.controller('table', function($scope) {
   $scope.typesHash = [{
     name: 'sugar',
     price: 1,
     unit: 1
   }, {
     name: 'lemon',
     price: 100,
     unit: 2.5
   }];
   $scope.addTable = function() {
     var arr = {
       name: 'meat',
       price: 200,
       unit: 3.3
     };
     $scope.typesHash.push(arr);
   }
 });
代码语言:javascript
运行
AI代码解释
复制
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="app">
  <div ng-controller="table">
    <div id="clcikbtn" style="background-color: black; width: 20px; height: 20px;" ng-click="addTable()"></div>
    <table class="table table-hover">
      <thead>
        <tr>
          <th>item</th>
          <th>price</th>
          <th>number</th>
          <th>edit</th>
        </tr>
      </thead>
      <tbody>
        <tr ng-repeat="x in typesHash">
          <td>{{x.name}}</td>
          <td>{{x.price}}</td>
          <td>{{x.unit}}</td>
          <td>edit</td>
        </tr>
      </tbody>
    </table>
  </div>
  <hr/>
  <div ng-controller="table">
    <div id="clcikbtn" style="background-color: black; width: 20px; height: 20px;" ng-click="addTable()"></div>
    <table class="table table-hover">
      <thead>
        <tr>
          <th>item</th>
          <th>price</th>
          <th>number</th>
          <th>edit</th>
        </tr>
      </thead>
      <tbody>
        <tr ng-repeat="x in typesHash">
          <td>{{x.name}}</td>
          <td>{{x.price}}</td>
          <td>{{x.unit}}</td>
          <td>edit</td>
        </tr>
      </tbody>
    </table>
  </div>
</body>

请查看角文档:https://docs.angularjs.org/guide/controller

当控制器通过ng控制器指令附加到DOM时,角将使用指定的Controller的构造函数实例化一个新的Controller对象。一个新的子作用域将作为$scope的控制器构造函数的可注入参数。 使用控制器:

  1. 设置$scope对象的初始状态。
  2. 向$scope对象添加行为。

不要使用控制器:

  1. 操纵DOM -控制器应该只包含业务逻辑。将任何表示逻辑放入控制器中都会显著影响其可测试性。对于大多数情况有数据绑定和指令来封装手工DOM操作。
  2. 格式输入-使用角形控件代替。
  3. 滤波器输出-使用角度滤波器代替。
  4. 在控制器之间共享代码或状态-使用角服务代替。
  5. 管理其他组件的生命周期(例如,创建服务实例)。

出于这些原因,我建议对整个元素组使用相同的控制器,如下所示:

代码语言:javascript
运行
AI代码解释
复制
<body ng-app="app">
  <div ng-controller="table">
    <div id="clcikbtn" style="background-color: black; width: 20px; height: 20px;" ng-click="addTable()"></div>
    <table class="table table-hover">
      <thead>
        <tr>
          <th>item</th>
          <th>price</th>
          <th>number</th>
          <th>edit</th>
        </tr>
      </thead>
      <tbody>
        <tr ng-repeat="x in typesHash">
          <td>{{x.name}}</td>
          <td>{{x.price}}</td>
          <td>{{x.unit}}</td>
          <td>edit</td>
        </tr>
      </tbody>
    </table>
  </div>
</body>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28007088

复制
相关文章
java动态编译类文件并加载到内存中
  如果你想在动态编译并加载了class后,能够用hibernate的数据访问接口以面向对象的方式来操作该class类,请参考这篇博文-http://www.cnblogs.com/anai/p/4270214.html
程序员一一涤生
2019/09/10
3.2K0
云硬盘怎么挂载到linux?云硬盘可以挂载到任何系统吗?
云产品在现在的网络技术当中非常普遍和常用,很多大型的云产品公司推出了不同类型的硬盘以及云服务器,这些产品可以满足不同企业以及不同个人的网络用品需求,而且可以提供非常多丰富功能。云硬盘在某些公司或者个人使用当中已经取代了硬盘的功能,而且云硬盘拥有容易扩展以及存储文件安全的性能。现在来了解一下云硬盘怎么挂载到linux。
用户8715145
2022/03/23
12.1K0
JVM | 从类加载到JVM内存结构
我在上篇文章:JVM | 基于类加载的一次完全实践 中为你讲解如何请“建筑工人”来做一些定制化的工作。但是,大型的Java应用程序时,材料(类)何止数万,我们直接堆放在工地上(JVM)上吗?相反,JVM有着一套精密的管理机制,来确保类的加载、验证、解析和初始化等任务能够有序且高效地完成。
kfaino
2023/10/02
2820
JVM | 从类加载到JVM内存结构
Linux吃掉我的内存
在Windows下资源管理器查看内存使用的情况,如果使用率达到80%以上,再运行大程序就能感觉到系统不流畅了,因为在内存紧缺的情况下使用交换分区,频繁地从磁盘上换入换出页会极大地影响系统的性能。而当我
顶级程序员
2018/04/26
9970
Linux吃掉我的内存
数据库“炸了”,加CPU加内存?或许还有更好的解决方法!
之前在做业务应用系统压力测试项目的时候,发现大部分性能不达标的应用,问题都出在数据库上。数据库压力过大是每个业务经理都多多少少面临过的问题,那么解决的办法除了纵向提高数据库配置之外,是否还有其他更高效的途径呢?
嘉为蓝鲸
2021/09/01
1.5K0
我叫“毕加所”,不是毕加索。。。
我,腾讯家族的新成员。 跟兄弟姐妹一样,属鹅。 在与世界见面的第一天, 我想用歌声对你们说: 好险好险, 经过产品、PR、运营、技术的一夜battle, 终于,我叫—— 毕加所 来到这个世界上,我有自己的使命。 在歌声里, 你是否记得, 上次认识新同学是哪年? 你们之间有怎样的故事? 同窗时光总是短暂, 让毕业后的相聚更显珍贵。 因此,“毕加所”更要用切实行动告诉你, 毕业从此不散场。 为什么要办“毕加所”? 以AI加速器为始,腾讯按下产业孵化启动键。从AI、SaaS到WeCi
腾讯SaaS加速器
2020/06/09
5070
MONGODB 加索引 大内存 与连锁思维
创建MONGODB 的索引,属于基本操作,但如果是一个有2T 的 collection 要加一个索引,也属于基本操作,实际上量变产生质变,很多问题的考虑都不在那么简单。
AustinDatabases
2020/08/26
2.5K0
Spark在处理数据的时候,会将数据都加载到内存再做处理吗?
对于Spark的初学者,往往会有一个疑问:Spark(如SparkRDD、SparkSQL)在处理数据的时候,会将数据都加载到内存再做处理吗?
大数据学习与分享
2020/09/14
1.3K0
Spark在处理数据的时候,会将数据都加载到内存再做处理吗?
Linux吃掉了我的内存
在Windows下资源管理器查看内存使用的情况,如果使用率达到80%以上,再运行大程序就能感觉到系统不流畅了,因为在内存紧缺的情况下使用交换分区,频繁地从磁盘上换入换出页会极大地影响系统的性能。而当我们使用free命令查看Linux系统内存使用情况时,会发现内存使用一直处于较高的水平,即使此时系统并没有运行多少软件。这正是Windows和Linux在内存管理上的区别,乍一看,Linux系统吃掉我们的内存(Linux ate my ram),但其实这也正是其内存管理的特点。
马哥linux运维
2018/11/28
7300
Postgresql concurrently index 为什么可以在线加索引
提到在线加索引都是商业数据库的功能,例如SQL SERVER 在线加索引就是你花钱买的版本也必须是企业版, 标准版都不能在线加索引。POSTGRESQL 支持在线加索引的功能,在本文撰写期间MYSQL 是不支持 online add index 对于几千万的大表建立索引还是要使用工具,并且8.0 使用gh ost 是有我问题,所以对于大表加索引并且是8.0的情况还得是 pt-osc.
AustinDatabases
2021/08/06
8780
Postgresql  concurrently index  为什么可以在线加索引
建议收藏chatGPT说的加Ubuntu虚拟内存的教程
这个是当下最流行最时髦的AI神器chatGPT和我一起合作写的一篇通用技术文章,请读者笑纳!
江涛学编程
2023/05/27
1.3K0
建议收藏chatGPT说的加Ubuntu虚拟内存的教程
建议收藏chatGPT说的加Ubuntu虚拟内存的教程
这个是当下最流行最时髦的AI神器chatGPT和我一起合作写的一篇通用技术文章,请读者笑纳!
江涛学编程
2023/03/17
1.6K0
Springboot中maven需要加的配置
给maven 的settings.xml配置文件的profiles标签添加 <profiles> <profile> <id>jdk-1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler
用户5927264
2019/08/01
1.3K0
GDS中如何加logo
好,言归正传,在GDS中打上自己的logo是一件很cool的事,而且有时候也是很必要的。
白山头
2020/06/29
1.1K0
为什么abstract @service注解的类不被加载到beanfactory中
使用过spring开发的开发者对@Service注解以及@Autowired注解不会陌生,系统在启动时会把@Service注解的类加载到BeanFactory中,然后就可以通过@Autowired注解的方式注入Service类实例,但并不是所以被@Service注解的类都会被加载到系统中,那么到底哪些类会被加载到系统中(也就是满足什么条件才会被加载呢),这个看下ClassPathScanningCandidateComponentProvider类的findCandidateComponents方法:
johnhuster的分享
2022/03/29
4690
Taro中如何将store加载到项目中
上面文章我们了解了如何创建store,最后导出时,在函数内部创建了store,所以导出时,函数需要调用,然后通过provicer组件将其注入到项目中。
挥刀北上
2022/05/11
7780
Taro中如何将store加载到项目中
利用Numpy中的ascontiguousarray可以是数组在内存上连续,加速计算
AttributeError: incompatible shape for a non-contiguous array
用户7886150
2021/01/02
2K0
将WordPress文章中的外链图片自动下载到本地
WordPress很多插件或者代码都可以实现在编辑文章中自动将外链图片下载到本地,最终我选择了一个叫:Easy Copy Paste的插件。
小狐狸说事
2023/11/17
5880
将WordPress文章中的外链图片自动下载到本地
React Hooks中这样写HTTP请求可以避免内存泄漏
译文来自 https://dev.to/somedood/best-practices-for-es2017-asynchronous-functions-async-await-39ji 原作者 Victor de la Fouchardière 译者: 蓝色的秋风(github/hua1995116) 大家好 !今天,让我们看一下在 React Hooks 中使用 fetch 和Abort Controller取消Web请求从而来避免内存泄露!当我们用 Fetch 来管理数据时,有时我们想取消请求(例如
秋风的笔记
2020/10/27
1.6K0
React Hooks中这样写HTTP请求可以避免内存泄漏
微信昵称可以加雪花了,个性又好看
这里先来看一下效果,我们可以看到昵称文字的上面有一个雪花的样式,感觉还是非常不错的!
@超人
2021/02/26
1.1K0
微信昵称可以加雪花了,个性又好看

相似问题

ng-包括内部ng控制器不能正常工作

11

一个具有编译的元素上的两个ng类不能正常工作。

12

ng-控制器和ui-视图不能在相同的元素上工作。

22

角ng-显示不能从控制器工作。

21

ng-控制器: angularjs控制器的基本用法不能工作

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文