角度指令更新父控制器对象

时间:2016-11-15 13:10:01

标签: javascript angularjs

我一直在使用Angular一段时间但是当涉及到Controller(使用控制器作为语法)和模板内部的指令之间的双向数据绑定时,我有点迷失了控制器。

该指令的目的本质上是我需要收集的一组非常具体的数据的输入字段(照片,文本和其他一些东西)。

工作原理。

我的控制器FormCtrl从应用缓存加载一些数据。然后它将此数据传递给名为ctrl.form_fields的对象。

我需要我的指令才能访问ctrl.form_fields来显示数据。此外,如果在指令内对数据进行任何更改,则更新FromCtrl ctrl.form_fields对象。

我已经对父控制器和子指令之间的双向绑定做了一些研究和实验,但我无法弄明白。如果有人能提出一个理论上的例子,我真的很感激。

我不想使用$ scope。$ parent等来实现这个目标,因为它会变得太乱,难以维护。另外,我尽量不尽量使用$ scope。

干杯, 迪恩

2 个答案:

答案 0 :(得分:1)

也许我没有正确理解你的问题,但你不能通过属性将对象/值传递给指令,并使用双向绑定表达式?

angular
  .module('app')
  .directive('myDirective', function() {
    return {
     restrict: 'E',
     templateUrl: 'myTemplate.html',
     scope: {
       obj: "=" // Two way decleration  
     },
      
     controller: function($scope) {
       console.log($scope.obj); 
     }
   }
  });
<my-directive obj="ctrl.object"></my-directive>

答案 1 :(得分:0)

(部分)指令的一个例子:

controller: FooController, // import FooController as './foo.controller';
controllerAs: 'vm',
replace: true,
scope: {
  fields: '=formFields'
},
template: '<input type="text" ng-model="fields" />'

然后在您的控制器中,您可以使用参考&#39; vm.fields&#39;。您的输入字段应为:

<input type="text" form-fields="fields" />

我还没有测试过这个。