AngularJS指令属性中的非字符串类型

前端之家收集整理的这篇文章主要介绍了AngularJS指令属性中的非字符串类型前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想创建一个属性窗格,其中属性数量可以根据选择的对象而有所不同.

我已经创建了自己的指令称为属性,显示属性名称和值,使用如下代码

<div ng-app="MyApp">
  <div class="properties-pane" ng-controller="PropertiesPane">
    <div ng-repeat="property in properties">
      <property name="{{property.name}}" value="{{property.value}}">
    </div>
  </div>
</div>

简单,不是吗?这样做很好,除了property.value将被转换为一个字符串(因为它是DOM元素上的一个属性).如果属性值是其他数据类型,我该怎么办?例如一个对象.看到其余的实现(在Coffeescript中):

MyApp = angular.module('MyApp',[])

MyApp.controller 'PropertiesPane',($scope) ->
  $scope.properties = [
    # Note that value is an object,not a string:
    {name: 'First',value: {x:0,y:0,z:42}},{name: 'Second',y:20,z:0}},{name: 'Third',value: {x:1,y:1,z:1}},]

MyApp.directive 'property',($compile) ->
  restrict: 'E'
  transclude: false
  replace: true
  scope: {name: '@name',value: '@value'}
  template: '<div>{{name}} {{value.x}},{{value.y}},{{value.z}}</div>'
  #                          ^^^^^^^      ^^^^^^^      ^^^^^^^
  #   this doesn't work as value is a string,not an object

作为value.x,y和z在字符串上未定义,结果当然是:

首先,
其次,
第三,

我想要的输出是:

第0,42号
第二个0,20,0
第三,1,1

我怀疑在我如何编程添加元素的想法中有一些根本错误.什么是倾斜的方式来实现这样的东西?

编辑:解决方

通过引用而不是作为字符串值将值作为对象引用,在指令中使用=而不是@:

scope: {name: '@',value: '='}

并在模板中:

<property name="{{property.name}}" value="property.value">

请注意,我删除了{{}}.

name =’property.name’和范围:{name:’=’,value:’=’}?

这应该是魔术.

要知道更多见this搜索(ctrl f)为’@’,第一个结果是你想要的);

原文链接:https://www.f2er.com/angularjs/142926.html

猜你在找的Angularjs相关文章