Angular指令以双向绑定方式查找对象

时间:2016-01-14 23:45:12

标签: javascript angularjs

我将两个绑定传递给自定义角度v1.4.3指令。

  1. 具有2路绑定的对象(型号:' ='),可以是数组或不是[{something:' foo'},{something:' moo& #39;},...]或只是{某事:' foo',其他:'测试'}
  2. 查找该对象中使用的模型(lookUp:' @')。它的字符串描述了查找我想在该指令中使用的数据的路径。例如' [0] .something'或者' .something'。
  3. 我已经创建了一个函数来使用字符串来获取数据,但它打破了双向绑定,因为我对该弹出数据所做的任何更新都与绑定模型Object分开。

    我用来查找带有字符串键的对象的函数是:

    Object.resolve = function (path, obj, safe) {
      return path.split('.').reduce(function (prev, curr) {
        return !safe ? prev[curr] : (prev ? prev[curr] : undefined)
      }, obj || self)
    }
    
    vm.data = Object.resolve(vm.lookUp, vm.model); // finds the data I need to display and edit but breaks the binding to vm.model
    

    这是一种更有棱角的方式来做到这一点并保持绑定?

1 个答案:

答案 0 :(得分:0)

  1. 这种检索对象属性的功能已经实现 - $ parse。
  2. 要保持绑定,请使用$ watch。
  3. app.directive('test', function($parse) {
      return {
        restrict : 'E',
        scope : {
          model : '=',
          lookUp : '@'
        },
        template : 'Result is : {{result}}',
        link : function(scope, elem, attrs) {
          function getResult() {
            return $parse('model' + scope.lookUp)(scope);
          }  
          scope.$watch(getResult, function() {
            scope.result = getResult();
          });
        }
      }
    })
    

    http://plnkr.co/edit/J5vlnGkHfwNYDZHO4lx6?p=preview