Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Angularjs中是否有直接与controller和scope交互的方法?_Javascript_Angularjs - Fatal编程技术网

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

谢谢

干杯,
Chris

angular中的控制器定义实际上是一个类,而不是一个对象。在编译阶段,在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指令。但是谢谢你的想法。你可以使用一个不是“元素”组件的组件吗?也许作为一种属性?你的目标浏览器会支持吗?嗯。。。我必须检查一下。。。但是谢谢你的建议。