【问题标题】:Accessing and modifying the models that are initiated in template with angular.js使用 angular.js 访问和修改模板中启动的模型
【发布时间】:2013-07-26 19:39:26
【问题描述】:

小提琴:http://jsfiddle.net/RnJbt/2/

我有一个模板块,我在其中启动一个本地模型,这对于包含在命名空间中并不重要,但对模板的范围很有用。当用户点击一个按钮时,模型被传递给一个函数。该函数应该更新模型的值。

Fiddle 表明模型“deneme”在作为参数传递给更新函数时不会改变。但是如果我通过$scope 对象访问模型,我可以更新“更新”函数中的值,如下所示。

...controller...
    $scope.update = function(val){
        val = 10; // does not update deneme 
        $scope.deneme = 34; // updates it as expected
    }   

我不想用只对它们启动的模板块有用的一次性模型名称污染控制器的命名空间。我怎样才能在控制器范围内处理几乎匿名的参数而不必用它们的名字来声明它们?

【问题讨论】:

    标签: javascript angularjs controller angularjs-scope


    【解决方案1】:

    这是因为它是一个原始值。我稍微改变了小提琴,就像这样,它可以像你期望的那样工作:

    ng-init="deneme = {value: 5}"
    
    $timeout(function(){
    val.value = 23;
    .....
    

    这就像您将任何 javascript 变量设置为原始变量,然后将另一个变量设置为该值,然后重置原始变量。

    var a = 10
    var b = a
    var a = 2
    // a = 2, b = 10
    

    几个月前我遇到了同样的问题,所以我仍然记忆犹新。

    【讨论】:

    • 感谢有关原语的回复和信息。我继续快速搜索哦主题并找到了这个:stackoverflow.com/a/509614/37491。似乎 val 和 deneme 都是指向原语的指针,分配 val = new_val 只会改变它指向的点。但是分配 val.value = new_val 会更新 val 和 deneme 指向的对象的“值”指针。感谢您的启发:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多