我试图弄清楚如何用角度绑定工具提示的内容。我有一个看起来像这样的指令:
script.js
var myApp = angular.module('myApp', []); myApp.directive('initToolbar', function(){ return { restrict: 'A', link: function(scope, element, attrs) { $(element).qtip({ content: { ajax: { url: 'button.html' } }, position: { my: 'bottom left', at: 'bottom middle', target: $(element) }, hide: { fixed : true, delay : 1000 } }); } } });
它从这里使用qTip2插件
我的index.html看起来像这样(请注意,在实际文件中,我已经包括了所有源文件,为了避免混乱,我只是未将其粘贴在此处):
<body> <div initToolbar> <p> Hover over me. Hover over me. Hover over me. </p> </div> </body>
和
button.html
<div ng-controller="myController"> <button ng-click="someFunction()">Click me</button> </div>
如您在指令代码中看到的。将button.html加载到工具提示中,但是这会阻止angular正常运行-将button.html加载到弹出窗口中时,ng- click不起作用。那是因为角度不知道这一点。
我也知道button.html是有效的,因为只需添加
<ng-include src="'button.html'">
到index.html正常工作(即单击按钮执行someFunction())
所以我的问题是:
如何将工具提示的实际内容与angular绑定?如果没有内容,是否有一种方法可以绑定工具提示,以便角度了解它?我对$ scope。$ apply()很熟悉,但是我不太确定如何在这里使用它。
更新1 当从angular到HTML到javascript时,请确保从蛇形案例到camelCase。因此,init- toolbar在html中将其翻译为initToolbarjavascript。
init- toolbar
initToolbar
这是一个工作示例:http : //plnkr.co/edit/l2AJmU?p=preview
的HTML
<div init-toolbar=""> <p> Hover over me. Hover over me. Hover over me. </p> </div>
Button.html
<div> <button ng-click="someFunction()">Click me</button> </div>
JAVACRIPT
var app = angular.module('plunker', []); app.controller('MainCtrl', function($scope) { $scope.name = 'World'; $scope.someFunction = function() { $scope.name = 'FOO BAR'; }; }); app.directive('initToolbar', function($http, $compile, $templateCache){ return { restrict: 'A', link: function(scope, element, attrs) { $http.get('button.html', {cache: $templateCache}). success(function(content) { var compiledContent = $compile(content)(scope); $(element).qtip({ content: compiledContent, position: { my: 'bottom left', at: 'bottom middle', target: $(element) }, hide: { fixed : true, delay : 1000 } }); }); } } });
原版的
按钮不起作用的原因是因为angular不知道它应该绑定到它。您可以使用$ compile告诉angular做到这一点。我对qTip2插件知之甚少,但是如果您加载模板,然后对其进行编译, $compile(template)(scope);然后将其移交给qTip2,您将获得预期的结果。
$compile(template)(scope);