首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >angular.js教程第2级

angular.js教程第2级
EN

Stack Overflow用户
提问于 2014-10-15 16:34:04
回答 2查看 143关注 0票数 1

我刚刚在第2级的angular.js教程中看到了这一点:

代码语言:javascript
运行
复制
(function() {
  var app = angular.module('gemStore', []);

  app.controller('StoreController', function(){
    this.products = gems;
  });

  app.controller("TabController", function(){
    this.tab = 1;

    this.setTab = function(selectedTab){
      this.tab = selectedTab;
    };
  });

  var gems = [// a lot of code here...]
})();

我的疑问是: setTab函数如何改变TabControler选项卡变量的值?如果我在this.tab函数中使用‘setTab’,setTab函数将只是将一个变量赋值给它自己的内部作用域,不是吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-15 16:56:22

如果我在this.tab函数中使用‘setTab’,setTab函数将只是将一个变量赋值给它自己的内部作用域,不是吗?

实际上,不是。

this,在您的setTab函数中是一个引用--某个特定的TabController实例。因此,this.tab的意思是“TabController实例的选项卡属性”。这个实例将由角度内部创建来处理视图,所以您就不用担心这个部分了。

编辑:

您可以使用此示例:

代码语言:javascript
运行
复制
var MyConstructor = function() { 
    this.tab = 0;
    this.setTab = function(newTab) {
        this.tab = newTab;
    }; 
    this.logTab = function() {
        console.log(this.tab);
    };
};

var myObj = new MyConstructor();
myObj.logTab(); // prints 0
myObj.setTab(2);
myObj.logTab(); // prints 2

但是,正如dave提到的,我会坚持$scope方法。

票数 1
EN

Stack Overflow用户

发布于 2014-10-15 16:41:01

你必须看看角形如何在内部调用这个函数--它使用的方法如下

代码语言:javascript
运行
复制
app.controller("TabController").setTab.apply($scope, [selectedTab])

Objects/Function/apply

它调用setTab函数,但将this的值设置为$scope对象。

这比这要复杂一些,但这就是“怎么做”。

一般来说,我更喜欢在控制器中使用$scope对象,因为它确实存在,而且感觉上没有那么“神奇”。

代码语言:javascript
运行
复制
app.controller("TabController", function($scope){
    $scope.tab = 1;

    $scope.setTab = function(selectedTab){
        $scope.tab = selectedTab;
    };
});

关于更多的信息,这个问题解释得很好:'this' vs $scope in AngularJS controllers

为了了解fn.apply是如何工作的,下面是一个简单的示例:

代码语言:javascript
运行
复制
x = function() { alert(this.test); } 
x(); //alerts "undefined"
x.apply({test: 'hello!'}); //alerts "hello!"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26387599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档