如何在AngularJS中将范围传递给指令

时间:2014-05-06 10:54:47

标签: javascript angularjs angularjs-directive angularjs-scope

我想制作一个自定义指令,根据传递的模型做出决策。我跟着一个看起来很像我想做的例子here

最后,我使用以下代码片段将JSON地址传递给指令:

<div><b>Address</b>
    <address-source address="company.address"/>
</div>

这是指令:

AppDirectives.directive('addressSource', function ($compile) {
  var template = '<span> {{address.id}} </span>';

  var getTemplate = function(scope) {
    console.log("address id: " + scope.address.id);
    return template;
  };

  var linker = function(scope, element, attrs) {
    element.html(getTemplate(scope)).show();

    $compile(element.contents())(scope);
  };

  return {
    restrict: "E",
    replace: true,
    link: linker,
    scope: { 
      address: '='
    }
  };
});

地址在范围内,{{ address.id }}已解决。但是,当我想用​​它进行计算时,比如将其记录到控制台,错误会显示scope.address未定义。我究竟做错了什么?我认为与工作示例没有区别。

2 个答案:

答案 0 :(得分:0)

  

当我想用它进行计算时,比如将其记录到控制台

你在做什么计算?如果它不在linker函数中,那么您将无法访问该地址,因为它位于您写入时所请求的隔离范围内:

scope: { 
  address: '='
}

答案 1 :(得分:0)

从中删除.show()。

element.html(getTemplate(scope)).show();

像:

element.html(getTemplate(scope));

DEMO