我是 angularjs 的新手,所以也许我遗漏了一些东西,但是我找不到创建可重用视图的好方法,我可以在父视图中实例化(因为没有更好的词)。
我的用例是一个 Web 应用程序,其中我有一个主视图页面,然后在同一页面上有许多子面板,这些子面板基于相同的控件和视图模板显示相似的内容,但只是具有不同的配置选项。(例如:带有stackoverflow问题摘要的小面板,但每个面板都配置为提取不同问题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);
}
});