2017-01-04 90 views
0

重複按下按鈕一個div我在這裏以下的教程:https://fourtonfish.com/blog/2014-01-dynamically-add-directives-in-angularjs-no-jquery/在AngularJS

嘗試,當按下一個按鈕附加信息覈實。我有添加到我的主頁按鈕,但是當我點擊它,我得到:

angular.js:14324 TypeError: element.bind is not a function 

我很想如何糾正一些這方面的建議,甚至可能是一個更好的辦法,如果有一個。我覺得使用element.bind是一個jQuery的方法,可能有更好的方法來做到這一點與Angular?

main.html中

<div id ="fullForm" ng-controller="MainCtrl" >     
    <button-add></button-add> 
    <div id="test">test</div> 
</div> 

main.js

'use strict'; 

/** 
* @ngdoc function 
* @name jsongeneratorApp.controller:MainCtrl 
* @description 
* # MainCtrl 
* Controller of the jsongeneratorApp 
*/ 
angular.module('jsongeneratorApp') 
    .controller('MainCtrl', function ($scope) { 

    .directive('buttonAdd',function(){ 
    return{ 
    restrict:'E', 
    templateUrl:'scripts/directives/addbutton.html' 
    } 
}) 

.directive('addfields',function($compile){ 
    console.log("directive called."); 
    return function(element,attrs){ 
    element.bind("click",function(){ 
     angular.element(document.getElementById('test')).append($compile("<div>Test</div>")) 
    }) 
    } 
}) 

addbutton.html

<div class="row rowmargin"> 
    <div class="col-sm-9"> 
    </div> 
    <div class="col-sm-3"> 
    <button addfields class="btn"> Add New Variable</button> 

    </div> 
</div> 
+0

本教程可能使用較老版本的angular。而不是'element.bind'使用'element.on'。請參閱[本文檔](https://docs.angularjs.org/api/ng/function/angular.element),您可以看到'bind'已棄用 – devqon

+0

element.on(「click」,function().. 。產生相同的錯誤 –

回答

1

元件是第二個參數,而不是第一個。第一個是指令的$scope對象。

您可能有可能與angular的依賴注入混淆,但指令的link函數不適用於依賴注入。

如果您在簽名中添加範圍參數,將工作:

// You missed the first parameter 'scope' 
return function(scope, element, attrs){ 
    element.on("click",function(){ 
     $compile("<div>Test</div>")(scope, function(compiled){ 
      // callback 
      angular.element(document.getElementById('test')).append(compiled); 
     }); 
    }); 
} 

也請注意,bind功能is deprecated,所以你應該使用on代替。

+0

感謝您的建議。添加範圍導致錯誤: 未捕獲的錯誤:[ng:areq]參數'範圍'是必需的,我覺得有點混淆你也知道範圍需要是添加了嗎?有沒有辦法讓我檢查函數,還是隻帶有經驗? –

+0

是的,這是因爲'$ compile'服務期望一個作用域來編譯html:'$ compile(「

Test
」)(作用域) ' – devqon

+0

所以這個工作現在..非常感謝你!但是我有點困惑你怎麼知道它需要的範圍,我也從來沒有見過(範圍)語法添加到函數的結尾之前。解釋一下? –