- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
已添加更新 2,见下文
首先,这是我正在使用(并且需要修复)的框架的起点:
// index.html
<!doctype html>
<html ng-app="myApp">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script src="index.js"></script>
<body>
<div ng-controller="outerController">
<div id="copy"></div>
<hr>
<div id="src" ng-controller="innerController">
<table>
<th>Name</th>
<th>Type</th>
<tbody>
<tr ng-repeat="poke in pokemon">
<td>{{ poke.name }}</td>
<td>{{ poke.type }}</td>
</tr>
<tr>
<td>Pikachu</td>
<td>Electric</td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>
// index.js
var app = angular.module("myApp", []);
app.controller("innerController", function($scope) {
$scope.pokemon = [{
name: "Bulbasaur",
type: "Grass/Poison"
}, {
name: "Charmander",
type: "Fire"
}, {
name: "Squirtle",
type: "Water"
}];
});
app.controller("outerController", function($scope) {
$("#copy").html($("#src").html());
});
如您所见,子 Controller 将通过 ng-repeat
从其作用域的数据生成一个表。这一步就成功了。下一步是父 Controller 将内部 HTML 从 src
复制粘贴到 copy
。目的是让 copy
包含由 angularJS 在 src
中完全生成的完整表格的副本。
此步骤失败。只有表格标题和静态皮卡丘行是可见的。在做了一些研究之后,我确定这是因为 pokemon
在父 Controller 无法访问的子 Controller 范围内。复制到 copy
容器中的 HTML 包括整个 ng-repeat
指令。此复制的指令在父范围内,其中 $scope.pokemon
不存在/不包含任何数据,这就是 ng-repeat
中的 copy
未生成任何内容的原因。
我无法将数据放入父 Controller 中。在我的实际应用中,系统采用模块化设计。每个内部 Controller 代表一个模块,该模块从服务器中提取自己的数据集。有多个网页(由外部 Controller 表示)与模块之间存在多对多关系,并且每个网页中的模块组成需要是可修改的。这意味着模块使用的数据必须包含在其自身中。
我该如何纠正这个问题?
更新 1:已编辑。我发布了一个使用 $emit
和 $on
的示例,但应该假定 Robert 的示例是正确的,因为我对此还很陌生。引用他的回答。
更新 2:在测试 Alvaro Vazquez 和 Robert 的解决方案时,我确定了具体的根本原因。当执行 $("#copy").html($("#src").html());
时,复制的 ng-repeat
在任何数据传输到 outerController
之前执行,或者它从未执行过。最后,修改我最初在上面所做的使其完全正常工作:
var app = angular.module("myApp", []);
$(function() {
$("#copy").html($("#src").html());
});
app.controller("innerController", function($scope) {
$scope.pokemon = [{
name: "Bulbasaur",
type: "Grass/Poison"
}, {
name: "Charmander",
type: "Fire"
}, {
name: "Squirtle",
type: "Water"
}];
});
app.controller("outerController", function($scope) {
$scope.pokemon = [{
name: "Bulbasaur",
type: "Grass/Poison"
}, {
name: "Charmander",
type: "Fire"
}, {
name: "Squirtle",
type: "Water"
}];
});
更改了该特定语句的位置后,剩下的就是将数据传输到 outerController
,此时 Alvaro 和 Robert 的解决方案都有效。
顺便说一句,我认为有些人建议不要使用 $("#copy").html($("#src").html());
。正如我在评论中部分描述的那样,我正在开发的实际应用程序由多个网页组成,每个网页都包含自己的 outerController
。每个 innerController
都在自己单独的 HTML 文件中,通过 include 指令添加到 src
中。 outerController
复制 src
的内部 HTML,将其传递给第三方库,第三方库将其粘贴到 copy
并控制其视觉布局。 $("#copy").html($("#src").html());
实际上是第三方库实现的一部分,所以我无法更改它。因此,必须使用此声明。
当我回到家并且可以方便地使用 PC 键盘时,我会发布以上内容作为解决方案。同时,如果您有更好的解决方案,请随时推荐更好的解决方案,谢谢!
最佳答案
我认为您应该使用 Angular 服务。
首先,您应该声明一个服务,该服务会将数据“提供”给应用程序的其余部分。为了简单起见,我将只展示一个返回预定义数组的方法,但您可以在此处从服务器获取数据。
app.service('pokemonService', function () {
return {
getPokemon: function () {
return [{
name: "Bulbasaur",
type: "Grass/Poison"
}, {
name: "Charmander",
type: "Fire"
}, {
name: "Squirtle",
type: "Water"
}];
}
};
});
然后,您可以在任何 Controller 上使用该服务,将其作为任何其他预定义的 Angular 服务注入(inject):
app.controller('innerController', function($scope, pokemonService) {
$scope.pokemon = pokemonService.getPokemon();
});
app.controller('outerController', function($scope, pokemonService) {
$scope.outerPokemon = pokemonService.getPokemon();
});
最后,您可以在任何模板/您想要的模板的一部分中列出所有神奇宝贝:
<!doctype html>
<html ng-app="myApp">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script src="index.js"></script>
<body>
<div ng-controller="outerController">
<div id="copy">
<!-- Here you can also list the pokémon from your outerController, maybe this time in a list -->
<ul>
<li ng-repeat="poke in pokemonOuter">
{{ poke.name }} - <span class="type">{{ poke.type }}</span>
</li>
</ul>
</div>
<hr>
<div id="src" ng-controller="innerController">
<table>
<th>Name</th>
<th>Type</th>
<tbody>
<tr ng-repeat="poke in pokemon">
<td>{{ poke.name }}</td>
<td>{{ poke.type }}</td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>
如您所见,根本不需要弄乱 DOM。如果你使用 AngularJS,你应该以 Angular 的方式做事,直接使用 DOM 根本不是 Angular 的方式。相反,您应该将所有数据和业务逻辑放入服务中,然后在 Controller 中使用这些服务来检索数据并将其传递给 View 。
关于javascript - 将子作用域的数据用于父作用域的 ng-repeat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39350426/
这是我的本地域名 http://10.10.1.101/uxsurvey/profile/dashboard 在 Controller 中,我为用户列表设置了一个操作 redirect(control
要处理 Canonical URL,最佳做法是执行 301 重定向还是更好地为 www 和非 www 域使用相同的 IP 地址? 例如: 想要的规范 URL/域是 http://example.com
1 内网基础 内网/局域网(Local Area Network,LAN),是指在某一区域内有多台计算机互联而成的计算机组,组网范围通常在数千米以内。在局域网中,可以实现文件管理、应用软件共享、打印机
1 内网基础 内网/局域网(Local Area Network,LAN),是指在某一区域内有多台计算机互联而成的计算机组,组网范围通常在数千米以内。在局域网中,可以实现文件管理、应用软件共享、打印机
我想创建一个 weblogic 集群,其中有两个托管服务器,每个服务器在物理上独立的远程计算机上运行 根据weblogic文档 All Managed Servers in a cluster mus
我正在运行 grails 3.1.4,但在创建允许我将多个域对象绑定(bind)到其他几个域对象的模式时遇到了问题。作为我正在尝试做的一个例子: 我有三个类(class)。书籍、作者和阅读列表。 作者
我试图使用@count函数来根据它获取数据,但是在没有崩溃报告的情况下它以某种方式崩溃了。 这是代码 class PSMedia: Object { @objc dynamic var id
有谁知道是否有办法只输入字母字符而不输入数字?我想过这样的事情 CREATE DOMAIN countryDomain AS VARCHAR(100) CHECK( VALUE ??? );
我的代码: const checkoutUrl = 'https://example.com/checkout/*' window.onload = startup() function st
一些不是我编写的应用程序,也不是用 PHP 编写的,它为域 www.example.com 创建了一个 cookie。 我正在尝试替换该 cookie。所以在 PHP 中我做到了: setcookie
什么是 oauth 域?是否有任何免费的 oauth 服务?我可以将它用于 StackApps registration 吗? ?我在谷歌上搜索了很多,但找不到答案。 最佳答案 这是redirect_
自从 In October 2009, the Internet Corporation for Assigned Names and Numbers (ICANN) approved the cre
我使用 apache 作为我的应用程序 Web 服务器的代理,并希望即时更改与 sessionid cookie 关联的域名。 该cookie有一个与之关联的.company.com域,我想使用apa
我只想托管一个子域到cloudflare。我不想将主域名的域名服务器更改为他们的域名服务器。真的有可能吗? 最佳答案 是的,这是可能的,但是需要通过CloudFlare合作伙伴进行设置,或者您需要采用
When using socket in the UNIX domain, it is advisable to use path name for the directory directory m
想象两个共享一个域类的 Grails 应用程序。也许是 Book 域类。 一个应用程序被标识为数据的所有者,一个应用程序必须访问域数据。类似于亚马逊和亚马逊网络服务。 我想拥有的应用程序将使用普通的域
我有一个包含字段“URL”的表单。第一部分需要用户在文本框中填写。第二部分是预定义的,显示在文本框的右侧。 例如,用户在文本框中输入“test”。第二部分预定义为“.example.com”。因此,总
如果我要关闭并取消分配 azure 中的域 Controller ,从而生成新的 vm Generationid,我需要采取哪些步骤来恢复它? 最佳答案 what steps do I need to
我想尝试使用 Azure 作为托管提供商(我有一个域)。我读过那篇文章https://learn.microsoft.com/en-us/azure/app-service-web/web-sites
所以.... 我想知道是否有人可以在这方面协助我? 基本上,我已经创建了一个自托管的Docker容器,用作构建代理(Azure DevOps) 现在,我已经开始测试代理,并且由于我们的放置文件夹位于W
我是一名优秀的程序员,十分优秀!