2014-07-03 77 views
1

我想要做類似的東西(在我的html):如何嵌套角度表達式?

{{ Customer.Name }} 

Customer.Name

"{{ Customer.FirstName + ' ' + Customer.LastName }}" 

我怎樣才能做到這一點? Customer.Name -String是從服務器讀取的動態配置。我想在我的應用程序的幾個地方做到這一點,所以我不想要一個靜態的代碼隱藏功能,爲我做到這一點。

我想要的只是Angular遞歸地評估表達式。

+1

有沒有一般的方法來做到這一點。你需要某種輔助函數(例如指令,過濾器)。 – Yoshi

回答

1

您可以使用該方法$eval()的$scope實現這一目標。

例如,您的控制器將定義你的客戶對象是這樣的:

function TestCtrl ($scope) { 
    $scope.customer = { 
    firstname : 'Darth', 
    lastname : 'Vader', 
    name : 'customer.firstname + " " + customer.lastname' 
}; 
$scope.ev = $scope.$eval; 

}

然後在您的視圖中,您可以使用配置字符串是這樣的:

<h1 ng-controller="TestCtrl">Hello {{$eval(customer.name)}}!</h1> 

它重要的是你的customer.name屬性不包含大括號!

看到這個plunkr爲一個工作的例子:http://plnkr.co/edit/r524cP6OAOBBzDReLNw4?p=preview

+0

謝謝。這至少是一個更通用的方式來做到這一點。唯一「醜陋」的事情是我的字符串必須已經是一個表達式。感謝這對我來說是一個很好的解決方法。儘管如此,我更喜歡大括號的遞歸評估。會讓生活變得更容易! – NoRyb

1

有2種方法可以做到這一點。

創建一個使用客戶對象並連接First和Lastname的指令。

angular.module('customer.directives',[]). 
    .directive('customerName', function() { 
     restrict : 'EA', // both element and attr will work in case you are using a customer directive 
     replace : true, 
     scope : { 
      Customer : '=' 
     }, 
     template : '{{Customer.FirstName}} {{Customer.Lastname}}' 
}); 

調用示例:

<div ng-repeat="Customer in Customers"> 
    <customer-name='Customer'></customer-name> 
</div> 

或者你可以使用裏面的CustomerService一個函數來發送你的控制器的全名已經連接在一起。

例:

angular.module('Customer.Services', []) 
    .factory('CustomerService', function(){ 
     return { 
     /* other methods here */ 
     getFullName : function(Customer) { 
     return Customer.FirstName + ' ' + Customer.LastName 
     } 
    } 
}); 



angular.module('Customer.Controllers', []) 
    .controller('CustomerController', function($scope.CustomerService) { 

     $scope.service = CustomerService.query(); 

     $scope.getFullName = fucntion(customer) { 
      return CustomerService.getFullName(customer); 
     } 
    } 
) 

裏調用:

<div ng-repeat="Customer in Customers"> 
    {{getFullName(Customer)}} 
</div> 
+0

謝謝你的回答。這對我來說不夠通用。我無法將我的配置更改爲顯示Customer.Birthday。我必須創建一個指令和/或一個函數才能做到這一點。我更喜歡Nikolas的解決方法。 – NoRyb