Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.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
Angularjs 从ng include访问和修改$scope_Angularjs_Angularjs Scope_Angularjs Ng Include - Fatal编程技术网

Angularjs 从ng include访问和修改$scope

Angularjs 从ng include访问和修改$scope,angularjs,angularjs-scope,angularjs-ng-include,Angularjs,Angularjs Scope,Angularjs Ng Include,编辑 我刚刚意识到为什么它可能不起作用,尽管我不知道如何解决这个问题。包含在我的HTML主页上,不在我的ng视图中。这可能就是$parent不起作用的原因,因为从技术上讲,ng视图是include的父视图。所以它是: <body> <div ng-view></div> <div ng-include="menuPath"></div> </body> 在我的ng include中,我尝试执行以下操作: <sel

编辑 我刚刚意识到为什么它可能不起作用,尽管我不知道如何解决这个问题。包含在我的HTML主页上,不在我的ng视图中。这可能就是$parent不起作用的原因,因为从技术上讲,ng视图是include的父视图。所以它是:

<body>
 <div ng-view></div>
 <div ng-include="menuPath"></div>
</body>
在我的ng include中,我尝试执行以下操作:

<select ng-model="StatusID" ng-options="x.ID as x.Name for x in Statuses"></select>

但它不会获取数据,因为ng include显然创建了它自己的作用域。

您可以将数据存储在服务中,因为它们是单例的,并在控制器之间共享。大概是这样的:

app.factory('MenuCache', function() {

    var data = {
     };  // your data;

    return data;

});
然后它可以被注入你的控制器,这样你就不必担心它们的祖先了:

app.controller('MyCtrl', function($scope, MenuCache) {

});
**或者,作为对预先更新的问题的回答**

您可以在include上执行此操作,请参见$parent.StatusID,以便访问父作用域的StatusID

<select ng-model="$parent.StatusID" ng-options="x.ID as x.Name for x in a.Statuses">

演示:

您可以将数据存储在服务中,因为它们是单例的,并在控制器之间共享。大概是这样的:

app.factory('MenuCache', function() {

    var data = {
     };  // your data;

    return data;

});
然后它可以被注入你的控制器,这样你就不必担心它们的祖先了:

app.controller('MyCtrl', function($scope, MenuCache) {

});
**或者,作为对预先更新的问题的回答**

您可以在include上执行此操作,请参见$parent.StatusID,以便访问父作用域的StatusID

<select ng-model="$parent.StatusID" ng-options="x.ID as x.Name for x in a.Statuses">

演示:

ng include是创建子作用域的指令之一。由于它依赖于作用域继承来解析绑定,所以ng模型中应该有一个“.”来正确解析。否则,当通过更改下拉列表设置StatusID时,它将在子作用域上创建一个影子变量,该变量是父作用域中变量的副本。这会破坏模型绑定

您需要设置如下内容:

<select ng-model="model.StatusID" 
     ng-options="x.ID as x.Name for x in model.Statuses"></select>

ng include是将创建子范围的指令之一。由于它依赖于作用域继承来解析绑定,所以ng模型中应该有一个“.”来正确解析。否则,当通过更改下拉列表设置StatusID时,它将在子作用域上创建一个影子变量,该变量是父作用域中变量的副本。这会破坏模型绑定

您需要设置如下内容:

<select ng-model="model.StatusID" 
     ng-options="x.ID as x.Name for x in model.Statuses"></select>


试着把你的对象放在一个服务中并以这种方式共享。你能给我举个例子吗?不一定要精确。我对此还是有点陌生。你能告诉我你是如何在控制器中设置$scope.status的吗。这可能就是问题所在。我知道父页面上的作用域设置正确,因为我正在从作用域值加载主页面上的数据。使用ng视图,控制器会自动交换。在ng include中,视图已设置,但控制器从未交换甚至设置。这就是它不更新ng include视图的原因。如果您为每个菜单视图创建单独的指令,您将能够为每个菜单视图设置不同的控制器。尝试将对象放入服务并以这种方式共享。您能给我举个例子吗?不一定要精确。我对此还是有点陌生。你能告诉我你是如何在控制器中设置$scope.status的吗。这可能就是问题所在。我知道父页面上的作用域设置正确,因为我正在从作用域值加载主页面上的数据。使用ng视图,控制器会自动交换。在ng include中,视图已设置,但控制器从未交换甚至设置。这就是它不更新ng include视图的原因。如果您为每个菜单视图创建单独的指令,您将能够为每个菜单视图设置不同的控制器。请参见上面的编辑,我相信我明白了建议的解决方案不起作用的原因。我修改了我的问题,以便更准确地描述情况。ng-view与ng-include一样,创建子范围。我的解决方案或lucuma的解决方案应该有效。这两种解决方案都尝试使用范围继承来解析范围变量。还有一些事情我们可能看不到。您是否在作用域继承树中的某个位置使用隔离作用域?这也许可以解释为什么它不能正确解析。非常奇怪的是$parent没有定义。你能用一些简单的代码发布一个plunker来演示这个问题吗?我会把它放在一起。见上面的编辑,我相信我明白了为什么建议的解决方案不起作用。我修改了我的问题,以便更准确地描述情况。ng-view与ng-include一样,创建子范围。我的解决方案或lucuma的解决方案应该有效。这两种解决方案都尝试使用范围继承来解析范围变量。还有一些事情我们可能看不到。您是否在作用域继承树中的某个位置使用隔离作用域?这也许可以解释为什么它不能正确解析。非常奇怪的是$parent没有定义。您可以发布一个plunker,其中包含一些演示此问题的最少代码吗?我将把一个放在一起。我使用此基本方法,将侦听器连接到服务,以便两个视图都可以在数据更改时侦听,并且其中一个视图都可以提示更改。我使用此基本方法,将侦听器连接到服务 服务,以便两个视图都可以侦听数据何时更改,并且其中一个视图都可以提示更改。