2014-05-06 117 views
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

它是否正確 –

相關問題