我是新来angularjs,所以也许我失去了一些东西,但我不能找到一个很好的方法来创建一个父视图,我可以实例(由于缺乏一个更好的词),可重复使用的意见。Angular创建可重用面板(ctrl&view tpl)的最佳实践是什么?
我的用例是一个网页应用程序,我有一个主视图页面,然后在同一页面上有许多子面板,它们基于相同的控件和视图模板显示类似的内容,但只是具有不同的配置选项。 (例如:小板与计算器的问题,但其中,每个板构造为拉制细节不同的问题ID摘要)
我有一个的jsfiddle在这里工作:http://jsfiddle.net/abierbaum/Agbdz/
我所寻找的是关于两个反馈东西:
- 如何最好地将初始化参数传递到子面板控制器?
- 如果有更好的方法来做到这一点。
下面是代码
<!DOCTYPE html>
<div ng-app="app">
<div ng-init="names=['Jim','Spock','Jean Luc', 'Data', 'Riker']">
<h1>Non-looping instances</h1>
<br/><h1>First One</h1>
<div ng-include="'panel.tpl.html'"
ng-init="name = 'Bob'"
></div>
<br/><h1>Second One</h1>
<!-- Is this the best/only way to pass parameter to sub-panel? -->
<div ng-include="'panel.tpl.html'"
ng-init="name = 'Pete'"
></div>
<h1>Looping Forms</h1>
<!-- This is going to create a bunch of extra scopes: repeat & include -->
<div ng-repeat="name in names">
<div ng-include="'panel.tpl.html'"/>
</div>
</div>
<script type="text/ng-template" id="panel.tpl.html">
<div class="panel" ng-controller='PanelCtrl as ctrl'>
<br/>
<input type='text' ng-model='ctrl.name' />
<p>Current: {{ctrl.name}}</p>
<button ng-click="ctrl.sayHi()">speak</button>
</div>
</script>
</div>
而且控制文件的核心是这样的:
angular.module('app', [])
.controller('PanelCtrl', function($scope) {
this.name = $scope.name || 'Jack';
this.sayHi = function() {
console.log('Hi, I am ' + this.name);
}
});
感谢您的答复。我更新了基于此的jsfiddle并且具有非常接近的工作一个新的(http://jsfiddle.net/abierbaum/cVeSf/)。它允许在使用属性时传递设置,但由于某种原因,它不适用于ng-repeat。你看到任何看起来错误的东西吗? – Allen
@艾伦直到现在才看到这一点。你不需要在那里有另一个控制器,指令本身提供了可以使用的链接。设置中的“@”选项意味着它将首先评估传入的内容,然后将结果作为范围变量。这是'单向'。我已经更新了小提琴,让我知道,如果这是你在找什么:[查看更新的小提琴(http://jsfiddle.net/cVeSf/10/) – wynnwu