2013-12-23 321 views
1

我用角咆哮,其是用於表示消息相當不錯。 (https://github.com/marcorinck/angular-growl,角咆哮不顯示

可以在控制器中添加消息,但是在指令中添加消息時,不顯示,爲什麼? 這是我的測試代碼。

a.html

<?xml version="1.0" encoding="UTF-8" ?> 
<!doctype html> 
<html> 
<head> 
<link rel="stylesheet" type="text/css"  href="https://raw.github.com/marcorinck/angular-growl/master/src/growl.css" /> 

<script type="text/javascript" src="../lib/angular/angular.js"></script> 
<script type="text/javascript" src="../lib/angular-growl/angular-growl.js"> </script> 
<script type="text/javascript" src="../lib/angular-route/angular-route.js"> </script> 
<script type="text/javascript" src="a.js"></script> 
</head> 
<body> 
<div ng-view=""></div> 
<div growl="" class='growl-container'></div> 
</body> 
</html> 

a.js

'use strict'; 

var module = angular.module('a', ['ngRoute', 'angular-growl']); 
module.config(['$routeProvider', function ($routeProvider) { 
$routeProvider.when('/', { 
    controller: 'IndexCtrl', 
    template: '<button aaa>aaaa</button>' 
}); 
}]); 

module.controller('IndexCtrl', ['growl', function (growl) { 
growl.addErrorMessage('haha'); 
}]); 

module.directive('aaa', ['growl', function (growl) { 
return { 
    restrict: 'A', 
    scope: {}, 
    link: function (scope, element, attrs) { 
     element.bind('click', function (e) { 
      console.log('aaa'); 
      growl.addErrorMessage('aaa'); 
      growl.addErrorMessage('bbb'); 
     }); 
    } 
}; 
}]); 

var $html = angular.element(document); 
$html.ready(function() { 
angular.bootstrap($html, ['a']); 
$html.addClass('ng-app'); 
}); 

回答

0

只要你有角的外事件改變的角度範圍,你需要使用$apply通知角的改變是由和運行消化週期。

如果你使用ng-click,而不是你會不會遇到這個問題。

要解決當前外部事件代碼:

element.bind('click', function (e) { 
     scope.$apply(function(){ 
      growl.addErrorMessage('aaa');   
     }) 
}); 
+0

讚賞,這也正是根本原因。 但是爲什麼angular並不會自動在element.bind中做到這一點,你認爲有可能實現這一點? – sww176

+0

很高興看到您的問題解決!但是不,角度不能在你自己定義的回調函數中自動完成,並且在瀏覽器中調用。正是爲此,創建了$ apply。但是更好的解決方案是使用已經提到的ng-click。好運與角咆哮! –

+0

我寫了一個「AAA」指令,而不是原因NG點擊=「AAA()」是,我的合作伙伴之一,我提供HTML和CSS,他認爲這是很好的使用語義HTML,通過寫「做登錄」指令,我可以將登錄事件綁定到一個按鈕,他認爲添加'do-login'或'data-do-login'更可接受,ng-click =「doLogin()」似乎過於程序化(儘管它們都是指令)。 – sww176