考虑以下几点:采用了棱角分明包括像MVC谐音
<script type="text/ng-template" id="myTemplateName">
{{item.SomeProperty}}
<script>
<div ng-repeat="container in List">
<div ng-repeat="item in container.Items">
<!-- CASE 1 -->
<div ng-include="'myTemplateName'"></div>
</div>
<!-- CASE 2 -->
<div ng-include="'myTemplateName'" />
</div>
上面的代码在案例1,但不是在2种情况:情况1会工作,因为模板使用项目,这是由提供ng-repeat语句不在模板中,情况2不起作用,因为没有项目,而是我希望它使用container.SomeProperty。
也许我滥用角度包括,但我想在ASP.Net MVC中使用它们像partials。在那里,你可以定义一个部分,你可以传入一个模型。
有什么方法可以让我设置什么项意味着在模板内?使用马特的答案
问题解决了:
module.controller("ItemController", ['$scope', function ($scope) {
$scope.templateitem = ($scope.$parent.item) ? $scope.$parent.item : $scope.$parent.$parent.container.Item;
}]);
尽管如此,感觉那种脏:控制器需要知道它如何被使用。如果我可以从外面传递给控制器会更好。
更好的方法:
我没有真的像上述解决方案,因为控制器需要知道它是如何被使用的,所以我用一个指令:
app.directive("opportunity", function() {
return {
restrict: "E",
templateUrl: "opportunityTemplate",
scope: { templateitem: "=model" }
};
});
鉴于:
<script type="text/ng-template" id="opportunityTemplate">
{{templateitem.SomeProperty}}
</script>
<opportunity model="container.Item"></opportunity>
<opportunity model="somethingElse.Item"></opportunity>
现在我需要找出的是如何,我可以通过TEMPLATENAME进入指令,我可以做一个可重复使用的“局部”指令(请告诉我,如果我在这里重新发明轮子?)