angularjs - 仍然困惑于在范围内“赋值”一个属性代码中的值

时间:2014-08-25 22:24:38

标签: angularjs

我正在尝试修改Angular控制器上正常函数中$scope上存在的模型;但它没有像我期望的那样表现。我认为这是因为有一种特定的方法你必须为绑定到其他控件的对象赋值。

我的HTML看起来像......

<div data-kendo-grid data-k-on-change="Editor.handleChange(selected, data, dataItem, columns, Model)"></div>

我的$scope看起来像......

$scope.Model = {
    /* propertyes */
};

$scope.handleChange = function(selected, data, dataItem, columns, target){
   target = dataItem; // gets the raw JSON of what was selected
};

但是,这不会更新我的视图..也不会正确调整我的模型。所以我有两个主要问题。

  1. 如果仅通过该功能传递“模型”,如何为$scope.Model分配值?
  2. 如何确保$scope.Model的更新反映在视图中?

2 个答案:

答案 0 :(得分:2)

这不是Angular问题,而是您遇到的Javascript问题。

如果您在控制台中尝试此操作:

var a = 3;
var b = 4;
function assign(a, b) {
    a = b;
}
assign();

并且您测试了a的值,您会注意到a仍然是3。这是因为 JavaScript不支持参考参数。你必须改变你的职能:

$scope.handleChange = function(selected, data, dataItem, columns, target){
    $scope[target] = dataItem; // gets the raw JSON of what was selected
};

以及你打电话的方式:

"Editor.handleChange(selected, data, dataItem, columns, 'Model')"

这样就行了,因为你改变了$scope(之前你没有改变过;你正在改变一个局部变量)。

答案 1 :(得分:1)

您是否尝试将目标值作为属性名称传递?我正在考虑这样的事情:

$scope.handleChange = function(selected, data, dataItem, columns, target){
   $scope[target] = dataItem; // gets the raw JSON of what was selected
};

这样称呼(注意Model周围的引号):

<div data-kendo-grid data-k-on-change="Editor.handleChange(selected, data, dataItem, columns, 'Model')"></div>

如果您未成功在 on-change 函数中编辑$ scope,则可能是因为您的指令正在创建一个从其父级继承的隔离范围。这可能会让Angular感到不安:

  

范围

     

如果设置为true,则将为此指令创建新范围。   如果同一元素上的多个指令仅请求新范围   创建了一个新范围。新范围规则不适用于   模板的根,因为模板的根总是得到一个新的   范围。

     

如果设置为{}(对象哈希),那么新的&#34;隔离&#34;范围已创建。该   &#39;隔离&#39;范围与正常范围不同,因为它没有   原型继承自父范围。这很有用   创建可重复使用的组件,不应该意外地读取或   修改父范围内的数据。

https://docs.angularjs.org/api/ng/service/$compile

希望它有所帮助。