Директива AngularJS - Как я могу сказать, что выражение атрибута полностью оценено?

0

Скажем, у меня есть директива, которая принимает атрибут с именем "url", который может состоять из выражений и статических текстов, а оцененный результат "url" будет использоваться в качестве URL-адреса ng-include в шаблоне директивы. Как проверить, изнутри директивы, что атрибут полностью оценивается (т.е. все выраженные выражения), прежде чем я попытаюсь использовать его, чтобы каждый раз я не получал ошибку 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 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 ответ

1
Лучший ответ

Атрибут всегда "полностью оценен". Это просто, что содержащиеся в нем выражения оцениваются пустой строкой и позже вычисляются на что-то еще. Директива не может угадать, когда выражение должно быть правильным и когда оно должно быть неверным. Пользователь директивы должен просто не использовать его, пока URL неизвестен. Например:

 <div ng-if="form.id" ng-my-form url="/form/{{form.id}}_sometext"></div>
  • 0
    Спасибо, у меня работает нг-если.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню