AngularJS指令 - 如何判断属性表达式是否已完全评估?

时间:2015-06-28 13:08:14

标签: angularjs

假设我有一个接受名为" 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

1 个答案:

答案 0 :(得分:1)

该属性始终&#34;完全评估&#34;。只是它包含的表达式被计算为空字符串,然后被评估为其他字符串。该指令无法猜测表达式何时应该是正确的以及它应该是不正确的。当URL未知时,指令的用户应该不使用它。例如:

 <div ng-if="form.id" ng-my-form url="/form/{{form.id}}_sometext"></div>