如何通过AngularJS中的属性将对象传递给指令?

如何通过AngularJS中的属性将对象传递给指令?,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我想通过属性传递对象(引用-双向绑定),而不是通过隔离的作用域。我该怎么做?因为代码将传递字符串而不是对象: HTML 两件事: 根据Angular的要求,tr中的my指令应为my指令 惯例 {{row.data}打印变量,需要在不使用 {{}使其作为对象通过 {{}插值的结果是一个字符串。对象不能这样传递 绑定在这里是惯用的,因此更可取。当指令被迫使用父作用域时,整个过程变得混乱。但是,可以使用$parse手动解析作用域属性: $scope.$watch(function () {

我想通过属性传递对象(引用-双向绑定),而不是通过隔离的作用域。我该怎么做?因为代码将传递字符串而不是对象:

HTML

两件事:

  • 根据Angular的要求,
    tr
    中的my指令应为
    my指令
    惯例
  • {{row.data}
    打印变量,需要在不使用
    {{}
    使其作为对象通过

  • {{}
    插值的结果是一个字符串。对象不能这样传递

    绑定在这里是惯用的,因此更可取。当指令被迫使用父作用域时,整个过程变得混乱。但是,可以使用
    $parse
    手动解析作用域属性:

      $scope.$watch(function () {
        var myDirectiveGetter = $parse($attrs.myDirective);
        return myDirectiveGetter($scope);
      }, ...);
    

    这是一个绑定作业(
    指令可以执行双向数据绑定,而无需手动解析或编译任何内容,很抱歉没有提供plunker,但它是rebelius,不会为我保存

    JS HTML
    您可以从输出中看到,传递的对象已双向绑定,指令中所做的更改反映在控制器级别上

    假设我将处理一个隔离范围。在“link:{…}”部分的指令中,我有一个函数scope.doSomthing。如何在html中运行此函数(ng单击)如果作用域是隔离的,
    doSomething
    是否在指令或控制器的作用域中,您的用例是什么?这里:
    link:function(scope){scope.doSomething=function(){…}}
    我想通过ng click=“doSomething()”在html中调用它。在我添加隔离的
    作用域之前:{}
    对于指令,一切都正常您仍然可以执行
    模板:“do smth”
    我在HTML文件中有此按钮,而不是在指令中。如果我单击它,则什么也不会发生
    angular.module("app").directive("myDirective", function () {
        return {
            require: ["^form"],
            restrict: "A",
            link: function (scope, element, attrs, ctrls) {
                scope.$watch(function () {
                    return attrs.myDirective;
                }, function (newValue, oldValue) {
                // .....
    
      $scope.$watch(function () {
        var myDirectiveGetter = $parse($attrs.myDirective);
        return myDirectiveGetter($scope);
      }, ...);
    
    scope: true,
    bindToController: {
      myDirective: '<'
    },
    controllerAs: `vm`,
    controller: function ($scope) {
      $scope.$watch('vm.myDirective', ...);
    }
    
    var app = angular.module('plunker', []);
    
    app.controller('MainCtrl', function($scope) {
      $scope.myObj = {name: 'Tibro', age: 255}
    })
    .directive('myDirective', function(){
      return {
        scope: {
          'myAttribute': '='
        },
        template: '{{myAttribute}}',
        link: function(scope){
          scope.myAttribute.age= 31
        }
      }
    })
    
      <body ng-controller="MainCtrl">
        controller: {{myObj}} <br/>
        directive: <my-directive my-attribute="myObj"></my-directive>
      </body>
    
    controller: {"name":"Tibro","age":31} 
    directive: {"name":"Tibro","age":31}