2015-12-20 22 views
3

我想在加載指令時運行一些函數,然後能夠用ng-click再次「重新運行」它。我的代碼如下:ng-click上的控制器的角度 - 運行函數

const app = angular.module('app', []); 

class dummyController { 
    logIt() { 
     console.log('logging'); 
    } 
} 

app.directive('dummyDir',() => { 
    return { 
     controller: dummyController, 
     link(scope, element, attrs, ctrl) { 
      scope.logIt = ctrl.logIt(); 
      scope.logIt; 

     } 
    }; 
}); 

HTML

<div ng-app="app"> 
    <button class="reinit" type="submit" dummy-dir ng-click="logIt()">Reinit</button> 
</div> 

CodePen

不幸的是,點擊按鈕什麼都不做。我做錯了什麼?

+0

如果從控制器中調用分對數(),你不需要從鏈接調用它。這樣做會調用log()兩次。原因是控制器在鏈接之前得到實例化,並且在調用控制器時也運行任何logit()。因此,從控制器調用logit(),創建一個不同的函數,它將從ng-click運行logit()invokation – Gary

回答

4

在這一行

scope.logIt = ctrl.logIt(); 

你實際上是調用logIt功能和分配此功能變量logIt的結果。該函數不返回任何內容,所以結果是未定義的。

相反,你需要的變量的指針賦值給一個函數,這樣你就可以在以後使用它:

link(scope, element, attrs, ctrl) { 
    scope.logIt = ctrl.logIt; // assign a function, do not invoke it 
    scope.logIt();    // invoke the function 
} 
+0

兩個不同的backets ;-)工作,非常感謝! –

-1
class dummyController { 
    logIt() { 
     console.log('logging'); 
    } 
    logIt(); 

}