如何嵌套角度表达式?

问题描述:

我想要做类似的东西(在我的html):如何嵌套角度表达式?

{{ Customer.Name }} 

Customer.Name

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

我怎样才能做到这一点? Customer.Name -String是从服务器读取的动态配置。我想在我的应用程序的几个地方做到这一点,所以我不想要一个静态的代码隐藏功能,为我做到这一点。

我想要的只是Angular递归地评估表达式。

+1

有没有一般的方法来做到这一点。你需要某种辅助函数(例如指令,过滤器)。 – Yoshi

您可以使用该方法$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

有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