2015-06-28 42 views
0

說我有一個指令,接受一個名爲「url」的屬性,可以由表達式和靜態文本組成,「url」的評估結果將用作指令模板中ng-include的url。在我嘗試使用它之前,如何從指令中檢查,該屬性是否已完全評估(即所有表達式已定義),以便每次都不會收到404錯誤?AngularJS指令 - 如何判斷屬性的表達是否完全評估?

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

屬性始終是 「全面評價」。只是它包含的表達式被評估爲一個空字符串,並且後來被評估爲其他東西。該指令無法猜測表達式應該何時正確以及何時該表達式不正確。當URL未知時,指令的用戶應該不會使用它。例如:

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

謝謝,ng-if對我有用。 – Nick