通过参数将 mongo 文档 ID 传递给角度指令函数会抛出解析错误

passing mongo doc id via param to angular directive function throws parse error

本文关键字:函数 指令 错误 参数 mongo 文档 ID      更新时间:2023-09-26

var app = angular.module('my-app', [], function () {
});
app.controller('AppController', function () {
});
app.directive('copyMe', function () {
  return {
    restrict: 'EA',
    replace:true,
    scope:{wid:'='},
    template: '<div ng-click="copy()">Copy me</div>',
    link: function compile(scope, element, attrs ) {
      scope.copy = function(){
        alert( attrs.wid );
      };
    } 
   };
});
<!DOCTYPE html>
<html>
<head>
<script src="https://rawgit.com/angular/bower-angular/master/angular.min.js"></script>
  <meta charset="utf-8">
</head>
 <body ng-app="my-app" ng-controller="AppController">
  <copy-me wid="'1dfvdfv23'"></copy-me>
  <copy-me wid="2"></copy-me>
  <copy-me wid="3"></copy-me>
 </body>  
  
</html>

一个简单的 ang 指令。我需要在我的 ang 应用程序中的许多地方重用复制我功能。问题是,它的实际应用是"wid"实际上是一个mongo文档ID,它是字母和数字的组合。

出于某种原因,当我将 mongo id 作为"wid"角传递时会抛出解析错误。

当我用单引号括起来传递 id 时,它不会抛出解析错误,但确实在字符串中包含单引号。

单击不同的文本以查看何时运行代码段。我知道我可以去掉单引号,但这似乎是错误的。

有没有一种官方方法可以通过这种方式通过指令传递多字符字符串?

还有一个jsfiddle链接:https://jsbin.com/bajulepewi/edit?html,js,output

范围 wid 属性应为 @,而不是 =。 = 表示双向数据绑定 (https://docs.angularjs.org/api/ng/service/$compile#directive-definition-object(,因此您放在属性上的值应该是 ng 将读取和写入的作用域或控制器上的属性名称。第一个示例出现解析错误,因为它不是有效的属性名称,而其他两个是有效的。如果删除第一个值的第一个字符,它应该"有效"。但是,您的问题表明您确实想使用 @(单向绑定(,因为您可能不想更改指令中的 mongo doc ID。