Javascript 使用子范围';父范围的s数据';s ng重复
新增更新2,见下文 首先,这是我正在使用的框架(需要修复)的起点: 随着特定语句位置的更改,剩下的就是将数据传输到Javascript 使用子范围';父范围的s数据';s ng重复,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,新增更新2,见下文 首先,这是我正在使用的框架(需要修复)的起点: 随着特定语句位置的更改,剩下的就是将数据传输到outerController,此时Alvaro和Robert的解决方案都起作用 另外,我认为有些人建议不要使用$(“#copy”).html($(“#src”).html())。正如我在评论中部分描述的,我正在开发的实际应用程序由多个网页组成,每个网页都包含自己的outerController。每个innerController都位于各自独立的HTML文件中,通过include指令
outerController
,此时Alvaro和Robert的解决方案都起作用
另外,我认为有些人建议不要使用$(“#copy”).html($(“#src”).html())代码>。正如我在评论中部分描述的,我正在开发的实际应用程序由多个网页组成,每个网页都包含自己的outerController
。每个innerController
都位于各自独立的HTML文件中,通过include指令添加到src
中。outerController
复制src
的内部HTML,将其传递给第三方库,第三方库将其粘贴到copy
并控制其视觉布局<代码>$(“#copy”).html($(“#src”).html())
实际上是第三方库实现的一部分,所以我不能更改它。因此,使用此语句是一项要求
当我回到家,有了PC键盘的便利,我会把上面的内容作为一个解决方案发布。同时,如果您有更好的解决方案,请随意推荐,谢谢 Angular中的作用域使用原型继承,因此子作用域可以访问父属性,但父作用域不能访问子控制器作用域属性 您可以使用服务共享数据或使用$emit向上发送事件(向上发送到根范围) 我为您创建了一个plnkr,向您展示如何使用emit(您可以找到它)
我认为你应该利用角度服务 声明服务 首先,您应该声明一个将数据“服务”到应用程序其余部分的服务。为了简单起见,我将只展示一个返回预定义数组的方法,但是您可以在这里从服务器获取数据
app.service('pokemonService', function () {
return {
getPokemon: function () {
return [{
name: "Bulbasaur",
type: "Grass/Poison"
}, {
name: "Charmander",
type: "Fire"
}, {
name: "Squirtle",
type: "Water"
}];
}
};
});
在控制器中使用服务
然后,您可以在任何控制器上使用该服务,将其作为任何其他预定义的角度服务注入:
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>
-
{{poke.name}}-{{poke.type}
名称
类型
{{poke.name}
{{poke.type}
收尾
正如您所看到的,根本没有必要弄乱DOM。如果您使用AngularJS,您应该以有角度的方式进行操作,直接使用DOM根本不是有角度的方式。相反,您应该将所有数据和业务逻辑放入服务中,然后在控制器中使用这些服务检索数据并将其传递给视图。您愿意将数据阵列(在本例中是口袋妖怪阵列)移动到角度服务吗?通过这种方式,您可以从该服务从服务器检索数据,然后在您想要的任何控制器中访问数据。我认为这是最好的设计理念,如果你愿意的话,我可以发布一个答案。@AlvaroVazquez好吧,继续发布你的答案。该项目仍处于试验阶段,因此重点是尝试实现所需的功能。如果这是将要构建的框架的起点,那么您应该坚持这一点,不要将基本功能与jQuery混合使用。如果你知道jQuery解决问题的方法,那么几乎所有的方法都是有角度的。@thegreatjedi你有我的回答,希望它能帮助你:)我真的鼓励你好好利用MVC模式。事实上,使用AngularJS的主要原因是能够以一种相当简单的方式使用该模式;)@MarcusH您指的是我想将HTML从
src
复制到copy
的部分吗?对不起,我从实际系统中简化了这一点。在实际系统中,src
由外部控制器传递到第三方库(显然也使用angularJS),该库控制进入copy
的内容的布局。库实际上将我们想要复制的内容的id
作为参数,而不是html()
(在库的实现内部)。我对这部分无能为力,这是我的组织想要增加的一项功能,所以我的任务是让它发挥作用。我确实试过了,但没有起作用。我想知道我是否做对了。看看我对这个问题的更新。你忘了在OuterController操作中注入pokemonService,你是对的!我编辑了我的问题。谢谢!
app.service('pokemonService', function () {
return {
getPokemon: function () {
return [{
name: "Bulbasaur",
type: "Grass/Poison"
}, {
name: "Charmander",
type: "Fire"
}, {
name: "Squirtle",
type: "Water"
}];
}
};
});
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>