2016-01-02 46 views
0

上午嘗試致電角的js的功能,但它說:「無法讀取屬性‘忘記’的未定義」請幫助解決這個呼叫引導功能

我用下面的JS代碼

var rootApp = angular.module('rootApp', ['firstApp','secondApp']); 

var firstApp = angular.module('firstApp', []); 
firstApp.controller('FirstController', function($scope) { 
    alert("First app "); 
}); 

var secondApp = angular.module('secondApp', []); 
secondApp.controller('SecondController', function($scope) { 
    alert("Second app. "); 

$scope.forget = function() { 
alert("forget function calling "); 

} 

}); 

和在html中我使用下面的行來調用這個函數。

angular.element(document.getElementById('SecondController')).scope().forget(); 
+1

我想'SecondController'不是元素的ID,嘗試'angular.element(document.querySelector( '[控制器= 「SecondController」]'))。範圍()。忘記() ;' – Tushar

+0

這是說意外的令牌非法的 – dhaya

+0

我用下面的行,但它仍然說是相同的angular.element(document.querySelector('[controller =「SecondController」]'))scope()。 – dhaya

回答

0

把這段代碼控制器

$scope.forget = function() { 
    alert("forget function calling "); 
} 
+1

如果仔細觀察,「SecondController」已經有一個「忘記」的功能。僅在內部控制器中使用 – Tushar

+0

代碼。 – dhaya

0

裏面,我寧願你有一定的ID到你們以前NG-控制器=「SecondController」的DIV。 例如,

<div id="controllerContainer" ng-controller='SecondController'> 
</div> 

然後用下面的代碼來調用該函數:

var $scope = angular.element($('#controllerContainer')).scope(); 
$scope.forget(); 
$scope.$apply(); 

我已經使用jQuery選擇,但你可以用普通的JavaScript選擇嘗試爲好。

0

通過jQuery選擇器檢索範圍是一種破解方式。你想你的網頁分割成邏輯部分,並定義控制器爲每一個這樣的:

<div ng-controller="MainCtrl"> 
    <button ng-click="forget()">Forget</button> 
</div> 

的DIV中的DOM元素將有機會獲得MainCtrl的範圍,所以唯一剩下要做的就是定義函數在您的控制器內部:

app.controller('MainCtrl', ['$scope', function($scope) { 
    $scope.forget = function forget() { 
     // insert forget logic here 
    } 
}]); 

請注意用於定義控制器的數組表示法。如果你想縮小你的代碼,這很重要,因爲角度很大程度上依賴於依賴字符串值。這裏有一個sample plnkr供您試驗。

0

我不知道你究竟是想這樣做,但角度不同的工作方式。我想你正嘗試在你的DOM負載上調用「forget()」。如果這是一種情況,那麼你的方式就是錯誤的。 。

錯誤的方法 angular.element(的document.getElementById( 'SecondController'))範圍()忘記();

最好的辦法

  var rootApp = angular.module('rootApp', ['firstApp', 'secondApp']); 

      var firstApp = angular.module('firstApp', []); 
      firstApp.controller('FirstController', function ($scope) { 
       alert("First app "); 
      }); 

      var secondApp = angular.module('secondApp', []); 
      secondApp.controller('SecondController', function ($scope) { 
       alert("Second app. "); 
       $scope.forget = function() { 
        alert("forget function calling "); 
       } 

       init(); 

       function init() { 
        $scope.forget(); 
       } 
      }); 

否則,如果你正試圖把這種「忘記」方法上按一下按鈕或東西,那麼你需要按照下面的方法。

 <div id="controllerContainer" ng-controller='SecondController'> 
      <input type='button' ng-click='forget()' value='Click me'> 
     </div> 
+0

Created plunker https://plnkr.co/edit/D6Qj1Yn3Xrr661K3W9LR?p=preview –