当前位置: 首页 > 面试题库 >

将AngularJS作用域变量从指令传递到控制器的最简单方法?

宰父夕
2023-03-14
问题内容

将AngularJS范围变量从指令传递到控制器的最简单方法是什么?我所看到的所有示例似乎都很复杂,难道没有一种方法可以从指令访问控制器并设置其作用域变量之一吗?


问题答案:

于2014/8/25编辑: 这是我分叉的地方。

谢谢@anvarik。

这是JSFiddle。我忘了我在哪里分叉。但这是一个很好的示例,向您展示了=和@之间的区别

<div ng-controller="MyCtrl">
    <h2>Parent Scope</h2>
    <input ng-model="foo"> <i>// Update to see how parent scope interacts with component scope</i>    
    <br><br>
    <!-- attribute-foo binds to a DOM attribute which is always
    a string. That is why we are wrapping it in curly braces so
    that it can be interpolated. -->
    <my-component attribute-foo="{{foo}}" binding-foo="foo"
        isolated-expression-foo="updateFoo(newFoo)" >
        <h2>Attribute</h2>
        <div>
            <strong>get:</strong> {{isolatedAttributeFoo}}
        </div>
        <div>
            <strong>set:</strong> <input ng-model="isolatedAttributeFoo">
            <i>// This does not update the parent scope.</i>
        </div>
        <h2>Binding</h2>
        <div>
            <strong>get:</strong> {{isolatedBindingFoo}}
        </div>
        <div>
            <strong>set:</strong> <input ng-model="isolatedBindingFoo">
            <i>// This does update the parent scope.</i>
        </div>
        <h2>Expression</h2>    
        <div>
            <input ng-model="isolatedFoo">
            <button class="btn" ng-click="isolatedExpressionFoo({newFoo:isolatedFoo})">Submit</button>
            <i>// And this calls a function on the parent scope.</i>
        </div>
    </my-component>
</div>



var myModule = angular.module('myModule', [])
    .directive('myComponent', function () {
        return {
            restrict:'E',
            scope:{
                /* NOTE: Normally I would set my attributes and bindings
                to be the same name but I wanted to delineate between
                parent and isolated scope. */                
                isolatedAttributeFoo:'@attributeFoo',
                isolatedBindingFoo:'=bindingFoo',
                isolatedExpressionFoo:'&'
            }        
        };
    })
    .controller('MyCtrl', ['$scope', function ($scope) {
        $scope.foo = 'Hello!';
        $scope.updateFoo = function (newFoo) {
            $scope.foo = newFoo;
        }
    }]);


 类似资料:
  • 问题内容: 以下是我的html模板: 下面是我的代码: 为什么我会收到“ 未定义 ”而不是“ 某些消息 ” 下面是一个小提琴 http://jsfiddle.net/j2K7N/27/ 问题答案: 您的代码几乎是正确的,但是这里有几个问题: 在这里,您从控制器传递函数,该函数带有一个未定义的参数,该参数会导致警报消息带有“未定义”文本。我建议将HTML代码修改为: 请注意,我将传递为变量而不是函数

  • 问题内容: 我是 AngularJS的 新手, 并且喜欢到目前为止所看到的内容,尤其是模型/视图绑定。我想利用它来构建一个简单的“添加到购物篮”功能。 到目前为止,这是我的控制器: 这是我的HTML: 现在这可行,但是我高度怀疑这是在模型中创建新产品对象的正确方法。但是,这正是我完全缺乏AngularJS经验的地方。 如果不是这样做的话,什么是最佳实践? 问题答案: 您可以创建购物篮服务。通常在J

  • 问题内容: 在上一个问题之后,我现在尝试从指令中调用父控制器上的方法。我得到一个未定义的参数。这是我的工作: 和脚本: 调用updatePerson方法时,person是未定义的。 jsfiddle在这里:http : //jsfiddle.net/graphicsxp/Z5MBf/7/ 问题答案: 只需简单地如下更改您的html 您没有通过updatePerson传递“人”,这就是为什么它不起作

  • 问题内容: 我有两个Angular控制器: 我无法使用内部,因为它是未定义的。但是,如果我尝试像这样传递它… 我得到一个错误。有谁知道如何做到这一点? 在做 也失败。 注意: 这些控制器彼此之间不嵌套。 问题答案: 在多个控制器之间共享变量的一种方法是创建服务并将其注入到要使用它的任何控制器中。 简单服务示例: 在控制器中使用服务: 这个博客对此进行了很好的描述(特别是第2课)。 我发现,如果要跨

  • 问题内容: 我尝试将一个参数从指令传递给控制器​​中定义的方法。 我使用隔离范围。 这是Fiddle中的相关代码和Demo: 的HTML JS 我为什么得到?它应该是 谢谢, 问题答案: 您需要注释您的函数参数: 小提琴 视图: 指示: 在文档中对此进行了解释(尽管有些含糊): &或&attr- 提供一种在父作用域的上下文中执行表达式的方法。如果未指定attr名称,则假定属性名称与本地名称相同。给