我有一个javascript函数,可以根据JSON数据构建树,并创建一个锚标记元素列表,如:
<a ng-click="shareParent(4619)">Some data</a>
加载页面后会填充此列表。此ng-click未在控制器中注册。这是我的控制器:
catalog.controller('categoryTree', ['$scope',function($scope) {
$scope.shareParent = function(parent) {
console.log(parent)
}
}]);
数据永远不会出现在控制器上。我是新手,所以我可能在这里做错了。我甚至尝试过调用$ scope。$ apply(),但这也没有任何好处。
anchor元素确实有一个与之关联的控制器,并且还声明了ng-app。只是ng-click无效。
编辑:
在添加DOM元素后,在我的控制器中使用以下注入器代码解决它:
$injector = angular.element(document.querySelector('#categoryTree')).injector();
element = angular.element(document.querySelector('#category-tree'));
$injector.invoke(function ($compile) {
var scope = element.scope();
$compile(element)(scope);
});
可能有更好的方法。
答案 0 :(得分:4)
在Angular中创建新的HTML元素时,必须将其连接到范围。这称为compiling
例如:
function myController($scope,$compile,$element){
//Creating New Element
var newElement=$('<div ng-click=hello()>Hello World</div>')
//Compile The Element, and assign it to current scope
$compile(newElement)($scope)
//Append the element, to wherever do you want. For example to current controller element
newElement.appendTo($element)
$scope.hello=function(){
alert('It is working!')
}
}
答案 1 :(得分:2)
尝试使用$compile() ($scope)
类似
var domElement = $compile('your javascript to create dom elements')($scope);
然后您需要将DOM元素附加到您的页面。
希望这有帮助。
答案 2 :(得分:1)
你的代码看起来很好。您是否已将HTML绑定到控制器categoryTree
?
答案 3 :(得分:0)
我建议使用简单的onclick和访问函数和变量通过angular element().....玩得开心;)
angular.element(angular_app_controller_element).scope().var/function()