如何扩展 Angularjs ng-include 指令?
How to extend Angularjs ng-include directive?
我正在尝试用这个扩展 ng-include
指令:
module.directive('incComp', [function () {
return {
template: "<div ng-include=\"'app/component/{{incComp}}/template.html'\"></div>"
};
}]);
我是这样使用它的:
<div inc-comp="counter"></div>
但是发出的获取请求是针对:
/app/component/%7B%7BincComp%7D%7D/template.html
我不确定如何让它插入 inc-comp 属性的值,而不是仅仅使用模板字符串中的文字值。我从 this SO 问题(第二个答案)中得到了这样做的想法。
incComp
在您的模板中被评估为空。您需要将其添加到您的范围。 ng-include 采用表达式,而不是模板。这样的东西应该会更好:
module.directive('incComp', [function () {
return {
scope: true,
controller: function($scope, $element, $attrs) {
$scope.tpl = 'app/component/' + $attrs.incComp + '/template.html'
},
template: "<div ng-include=\"tpl\"></div>"
};
}]);
您也可以在 link 函数而不是控制器中执行此操作。
虽然我没有测试...
编辑:我想你也可以这样做:
module.directive('incComp', [function () {
return {
scope: {
incComp: '@'
},
template: "<div ng-include=\"'app/component/' + incComp + '/template.html'\"></div>"
};
}]);
任务也可以在没有 ng-include 和 isolated-scope 的情况下完成,很好的 solution 我认为:
index.html
<div ng-app="app" ng-controller="appCtrl">
<div add-template type="lion"></div>
<div add-template type="fox"></div>
</div>
<script data-require="angular.js@1.3.x" src="https://code.angularjs.org/1.3.14/angular.js" data-semver="1.3.14"></script>
<script type="text/javascript">
var app = angular.module("app", []);
app.directive('addTemplate', function() {
return {
templateUrl: function(elem, attr) {
return 'template_' + attr.type + '.html';
}
}
});
</script>
template_fox.html
<div> This is Fox Template </div>
template_lion.html
<div> This is Lion Template </div>
快乐的帮助!
我正在尝试用这个扩展 ng-include
指令:
module.directive('incComp', [function () {
return {
template: "<div ng-include=\"'app/component/{{incComp}}/template.html'\"></div>"
};
}]);
我是这样使用它的:
<div inc-comp="counter"></div>
但是发出的获取请求是针对:
/app/component/%7B%7BincComp%7D%7D/template.html
我不确定如何让它插入 inc-comp 属性的值,而不是仅仅使用模板字符串中的文字值。我从 this SO 问题(第二个答案)中得到了这样做的想法。
incComp
在您的模板中被评估为空。您需要将其添加到您的范围。 ng-include 采用表达式,而不是模板。这样的东西应该会更好:
module.directive('incComp', [function () {
return {
scope: true,
controller: function($scope, $element, $attrs) {
$scope.tpl = 'app/component/' + $attrs.incComp + '/template.html'
},
template: "<div ng-include=\"tpl\"></div>"
};
}]);
您也可以在 link 函数而不是控制器中执行此操作。
虽然我没有测试...
编辑:我想你也可以这样做:
module.directive('incComp', [function () {
return {
scope: {
incComp: '@'
},
template: "<div ng-include=\"'app/component/' + incComp + '/template.html'\"></div>"
};
}]);
任务也可以在没有 ng-include 和 isolated-scope 的情况下完成,很好的 solution 我认为:
index.html
<div ng-app="app" ng-controller="appCtrl">
<div add-template type="lion"></div>
<div add-template type="fox"></div>
</div>
<script data-require="angular.js@1.3.x" src="https://code.angularjs.org/1.3.14/angular.js" data-semver="1.3.14"></script>
<script type="text/javascript">
var app = angular.module("app", []);
app.directive('addTemplate', function() {
return {
templateUrl: function(elem, attr) {
return 'template_' + attr.type + '.html';
}
}
});
</script>
template_fox.html
<div> This is Fox Template </div>
template_lion.html
<div> This is Lion Template </div>
快乐的帮助!