Javascript 在Angularjs中是否有直接与controller和scope交互的方法?
我定义了一个控制器,范围中有一些变量。我可以知道我是否有办法直接在控制器外部为作用域变量赋值(而不是通过Javascript 在Angularjs中是否有直接与controller和scope交互的方法?,javascript,angularjs,Javascript,Angularjs,我定义了一个控制器,范围中有一些变量。我可以知道我是否有办法直接在控制器外部为作用域变量赋值(而不是通过ng model)?另外,我是否可以在网页的元素中的某个位置直接调用controller函数(而不是使用ng click) 谢谢 干杯, Chrisangular中的控制器定义实际上是一个类,而不是一个对象。在编译阶段,在HTML中引用控制器的每个位置,angular都使用定义的控制器类创建一个新的控制器对象。因此,可以使用同一控制器类引用多个作用域 始终存在与控制器关联的作用域,并且所有变量
ng model
)?另外,我是否可以在网页的
元素中的某个位置直接调用controller函数(而不是使用ng click
)
谢谢
干杯,
Chrisangular中的控制器定义实际上是一个类,而不是一个对象。在编译阶段,在HTML中引用控制器的每个位置,angular都使用定义的控制器类创建一个新的控制器对象。因此,可以使用同一控制器类引用多个作用域 始终存在与控制器关联的作用域,并且所有变量都绑定到该作用域。您可以通过调用以下命令来访问特定html元素的范围
var scope = angular.element("#myelement").scope();
//use the scope....
如果您让我们知道您试图从控制器外部访问作用域的原因,也会很好
更新
这是引导选项卡组件。。。你可以把这个当作
<tab>
<pane title="tab1"><pane>
<pane title="tab2"></pane>
</tabs>
这与主页上存在的相同。。我刚刚更新了它,以便在选项卡更改时广播事件
var directives = angular.module('myApp.directives', []);
directives.directive('tabs', function () {
return {
restrict:'E',
transclude:true,
scope:{},
controller:function ($scope, $element, $rootScope) {
var panes = $scope.panes = [];
$scope.select = function (pane) {
angular.forEach(panes, function (pane) {
pane.selected = false;
});
pane.selected = true;
$rootScope.$broadcast("tabChanged", pane.title);
}
this.addPane = function (pane) {
if (panes.length == 0) $scope.select(pane);
panes.push(pane);
}
},
template:'<div class="tabbable">' +
'<ul class="nav nav-tabs">' +
'<li ng-repeat="pane in panes" ng-class="{active:pane.selected}">' +
'<a href="" ng-click="select(pane)">{{pane.title}}</a>' +
'</li>' +
'</ul>' +
'<div class="tab-content" ng-transclude></div>' +
'</div>',
replace:true
};
});
directives.directive('pane', function () {
return {
require:'^tabs',
restrict:'E',
transclude:true,
scope:{ title:'bind' },
link:function (scope, element, attrs, tabsCtrl) {
tabsCtrl.addPane(scope);
},
template:'<div class="tab-pane" ng-class="{active: selected}" ng-transclude>' +
'</div>',
replace:true
};
});
var directives=angular.module('myApp.directives',[]);
指令。指令('tabs',函数(){
返回{
限制:'E',
是的,
作用域:{},
控制器:函数($scope,$element,$rootScope){
变量窗格=$scope.panes=[];
$scope.select=函数(窗格){
角度.forEach(窗格、函数(窗格){
pane.selected=false;
});
pane.selected=true;
$rootScope.$broadcast(“tabChanged”,pane.title);
}
this.addPane=函数(窗格){
如果(panes.length==0)$scope.select(pane);
窗格。推(窗格);
}
},
模板:“”+
“”+
“- ”+
'' +
“
”+
“
”+
'' +
'',
替换:正确
};
});
指令。指令('pane',函数(){
返回{
要求:“^tabs”,
限制:'E',
是的,
作用域:{title:'bind'},
链接:函数(范围、元素、属性、tabsCtrl){
tabsCtrl.addPane(范围);
},
模板:“”+
'',
替换:正确
};
});
这将在选项卡更改时发送事件 基本上我想同时使用angularjs和bootstrap(tab JavaScript组件)。我已经实现了REST体系结构,并希望在用户切换到其他选项卡窗格时检索资源。因此,我需要绑定到tab change事件,并调用控制器的函数从这个restful web服务中检索。另外,在从RESTfulWeb服务检索时,我需要指定一个用户Id。。虽然我一开始固定了用户Id,但不想在js文件中硬核控制器或作用域中的Id。所以我需要在作用域中设置变量(用户Id),并从外部调用控制器的函数(从restful web服务检索数据)。你知道如何做到这一点吗?谢谢如果可能的话,我希望避免使用custom指令,因为似乎并非所有浏览器都支持custom指令。但是谢谢你的想法。你可以使用一个不是“元素”组件的组件吗?也许作为一种属性?你的目标浏览器会支持吗?嗯。。。我必须检查一下。。。但是谢谢你的建议。