角度表达式在控制器范围内不起作用

时间:2016-03-26 16:16:22

标签: javascript angularjs scope controller

我遇到了以下代码的奇怪问题..

每当我删除ng-controller =" page"从body标签开始,表达式开始得到评估。但是在将此控制器应用于body标签时,表达式往往被打印为文本而不是被评估。

以下是我的相关代码(Snippet):

<html ng-app="app">
    <head>
        <!-- links removed for brevity -->
        <script>
            var app = angular.module('app',[]);
            app.controller('page',function($scope){
                $scope.segment.name = 'asdf';
            });
        </script>
    </head>
    <body ng-controller="page" style="padding:0px;">
        <!-- additional markup removed for brevity -->
        <form class="navbar-form navbar-right" role="search">
            <div class="form-group">
                <input type="text" class="form-control" placeholder="Enter Portal ID" ng-model="page.segment.name"/>
            </div>
            <button class="btn btn-default">Search {{page.segment.name}}</button>
        </form>
    </body>
</html>

我可能在上面的代码中犯了一些错误,因为下面的代码我作为概念证明写得很好。

POC代码(Snippet):

<html ng-app="app">
    <head>
        <!-- links removed for brevity -->
    </head>
    <body ng-controller="page">
        <a>Name : {{page.segment.name}}</a>
        <input type = "text" ng-model="page.segment.name"/>
    </body>
    <!-- links removed for brevity -->
    <script>
        var app = angular.module('app',[]);
        app.controller('page',['$scope',function($scope){}]);
    </script>
</html>

请帮助 提前谢谢..

1 个答案:

答案 0 :(得分:0)

您可能在控制台中收到错误消息。我猜它的类似于&#34;无法设置属性&#39; name&#39;未定义的。&#34;你在这里做的是无效的:

$scope.segment.name = 'asdf';

你需要这样做:

$scope.segment = {};
$scope.segment.name = 'asdf';

或者这个:

$scope.segment = { name: 'asdf' };

在尝试设置属性之前,必须显式创建segment对象。