2012-12-25 52 views
2

我想使用這個庫(http://pinesframework.org/pnotify/)我angularjs項目編譯angularjs模板上顯示的通知

在這裏顯示錯誤通知是它的一個簡單的用法:

$.pnotify({ 
     title: 'Oh No!', 
     text: text OR HTML, 
     type: 'error' 
    }); 

我想要什麼顯示我在通知上得到的JSON錯誤,但是我不能在此通知中添加帶有角標記的html。

這就是我試圖做(我可是從一個服務調用它,我傳遞的$範圍功能):

 scope.errors = {"errors":[{"text":"error1"},{"text":"error2"}]}; 
     var htmlTemplate = '<p ng-repeat = "error in errors.errors">{{error.text}}</p>'; 
     var result = $compile(htmlTemplate)(scope); 

然後

 $.pnotify({title: title, 
     text: result, 
     type: 'error', 
    }); 

,但該通知只顯示[object Object]

如果我試圖將它添加到像這樣的div它工作正常

result.appendTo($("#someDiv")); 

我試圖解決它,但沒有爲我工作,我想從angularjs方面解決它,而不是通過改變我的情況下庫。

感謝

+0

你可以把你的問題一起扔在一起jsfiddle嗎? –

+0

結果是一個html元素,而不是一個String。你可能需要'result.innerHTML'。 – asgoth

+0

@MathewBerg我創建了這個jsfiddle(這是最糟糕的jsfiddle你會看到:))http://jsfiddle.net/bh6kX/19/ – ibmkhd

回答

3

的解決方案,我想出了包括編譯$()荷蘭國際集團模板pnotify其添加到DOM後。爲了在pnotify添加它之後找到它在DOM中的位置,我使用了addClass參數來添加名爲myClazz的虛擬類。然後我用jQuery選擇找到它:

var htmlTemplate = '<p ng-repeat = "error in errors.errors">{{error.text}}</p>'; 
$.pnotify({ 
    title: 'title', 
    text: htmlTemplate, 
    type: 'error', 
    addclass: 'myClazz' 
}); 
// now that htmlTemplate has been added to the DOM, $compile it 
var element = $('.myClazz'); 
$compile(element)(scope); 

Fiddle

注意,DOM操作應該真正在一個指令來完成,而不是服務。

+1

事件更好,函數$ .pnotify返回已添加到DOM的jQuery元素,因此您可以使用它來簡化代碼: '''$ compile($。pnotify({title:'title',text: htmlTemplate,輸入:'error'}),scope);'' –

0

看着你的jsfiddle後:jsfiddle.net/bh6kX/19我有一些意見之前,我們得到的答案。

編譯函數不返回html,它返回一個鏈接函數,用於將模板(DOM元素/樹)綁定到範圍docs。你也不需要編譯任何東西,因爲它看起來像pnotify(我沒有經驗)將直接文本作爲參數。所以,通過你的錯誤變量,我已經縮短到只需循環後:

var errors = [{"text":"error1"},{"text":"error2"}]; 

而剛剛加盟的文聯,我通過了入ptnoify和它的工作。造型不在那裏,但我有一種感覺,只是jsfiddle不喜歡css。

小提琴http://jsfiddle.net/rtCP3/36/

+0

但我想使用angulajs模板而不是通過循環和連接在將來的錯誤將有更多的文字。 – ibmkhd