加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 07:43:43 所属栏目:安全 来源:网络整理
导读:我想创建一个属性窗格,其中属性的数量可以根据选择的对象而有所不同. 我已经创建了自己的指令称为属性,显示属性的名称和值,使用如下代码: div ng-app="MyApp" div class="properties-pane" ng-controller="PropertiesPane" div ng-repeat="property in prop
我想创建一个属性窗格,其中属性的数量可以根据选择的对象而有所不同.

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

<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)为’@’,第一个结果是你想要的);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读