假设我有一个接受名为" url"的属性的指令可以由表达式和静态文本组成,以及" url"的评估结果。将用作指令模板中ng-include的url。在我尝试使用它之前,如何检查从指令内部完全评估该属性(即所有表达式已定义),以便每次都不会出现404错误?
app.controller('MyCtrl', function($scope, $timeout) {
$timeout(function(){
$scope.form = { id: 'test' };
}, 1000)
})
.directive('ngMyForm', function() {
return {
template: '<div ng-include="formUrl"></div>',
link: function(scope, element, attrs) {
attrs.$observe('url', function(value) {
// how do I make sure that value's expression is fully "resolved" before using it?
scope.formUrl = value;
});
}
};
});
这是HTML:
<body ng-controller="MyCtrl">
<div ng-my-form="{{form.id}}_sometext" url="/form/{{form.id}}_sometext"></div>
</body>
我在这里设置了一个插件:http://plnkr.co/edit/MDhUpT?p=preview
答案 0 :(得分:1)
该属性始终&#34;完全评估&#34;。只是它包含的表达式被计算为空字符串,然后被评估为其他字符串。该指令无法猜测表达式何时应该是正确的以及它应该是不正确的。当URL未知时,指令的用户应该不使用它。例如:
<div ng-if="form.id" ng-my-form url="/form/{{form.id}}_sometext"></div>