0

我想制作一个自定义指令,根据传递的模型进行决策。我跟着一个看起来很像我想要做的例子,here如何将范围传递给AngularJS中的指令

最后,我通过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未定义。我究竟做错了什么?我看到与这个工作示例没有任何区别。

+0

你能在这里重现呢? http://plnkr.co/edit/wR67opQB2EAI62rdHMv0?p=preview – tasseKATT

+0

事实上,我做不到。我认为它与我上面的基本相同,但它在那里有效。即使我将版本重置为我正在使用的版本,Angular 1.0.7和jQuery 1.11.1 –

回答

0

,当我想要做计算它,喜欢它登录到控制台

你在哪里做这些计算?如果不是在linker功能,那么你将无法访问的地址,因为它生活在当你写你所要求的分离范围:)从这个

scope: { 
    address: '=' 
} 
+0

正如您在上面看到的,我将范围从链接器传递给getTemplate函数并记录在那里,但未成功。 –

+0

哦,是的,抱歉,我错过了。在这种情况下,我的解释是不正确的。 – biofractal

0

删除.show(。

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

像:

element.html(getTemplate(scope)); 

查阅DEMO

+0

它是否正确 –

相关问题